XmlDocument неправильно анализирует xml-строку flutter

#xml #flutter #dart

Вопрос:

Я хочу записать xml-строку в XML-файл. Я использую службу http для чтения xml-строки. После чтения xml-строки из службы я преобразую эту строку в форматированную строку, а затем записываю ее в XML-файл. Проблема в том, что отформатированная строка неправильно отображает XML — макет. Он показывает закрывающий и конечный тег в формате, который я выделил на скриншоте ниже:

Изображение1

Вот скриншот ответа сервера, и я также распечатал форматированную форму этой строки XML.

Вот фрагмент кода.

 Future readLayoutFile() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = prefs.getString('token');
    print('token:$token');
    Response response;
    Dio dio = new Dio();

    dio.interceptors
        .add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
      var customHeaders = {
        'authorization': token,
        // other headers
      };
      options.headers.addAll(customHeaders);
      return options;
    }));

    try {
      response = await dio.post(globals.ursl.getURL(URLS.READLAYOUTURL));
      print('XML STRING FROM  HTTP SERVICE:');
      print('${response}');

      if (response.statusCode == 200) {
        Map<String, dynamic> mapobject = response.data;
        var success = mapobject['success'];
        if (success == 1) {
          XmlDocument xmlDocument = XmlDocument.fromString(
            mapobject['Layout']['xml_Save'],
            trimWhitespace: true,
            parseCdataAsText: true,
            parseCharacterEntities: true,
          );

          print('FORMATTED XML STRING :${xmlDocument.toFormattedString()}');

          xmlFile.writeAsStringSync(xmlDocument.toFormattedString());

          await parseXmlData(xmlFile.readAsStringSync());
        } else {
          print(response);
        }
      } else {
        print('response code not 200');
        print(response);
      }
    } catch (error) {
      print('ERROR IN READING $error');
    }
  } 

Кто-нибудь, пожалуйста, помогите мне, как решить эту проблему.

Заранее спасибо.

Ответ №1:

ВАЙ. Согласно документации:

По умолчанию будут закодированы только символыamp;, < и>.

Ознакомьтесь с .toString(encodeCharacterEntities: false) методом.

UPD:

Также в соответствии с той же документацией,

toFormattedString на данный момент довольно примитивен, и я хотел бы добавить в него дополнительные параметры форматирования в какой-то момент).

Попробуйте другую библиотеку, например эту. Вот вам пример того, как можно разобрать и украсить вашу строку:

 import 'package:xml/xml.dart';

void main(List<String> arguments) {
  String xmlString1 =
      '''<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>n<terminal>nt<favItems>nt</favItems>nt<regularItems>ntt<menu>nttt<menuId>ntttt1nttt</menuId>nttt<name>nttttLUNCHnttt</name>ntt</menu>ntt<menu>nttt<menuId>ntttt2nttt</menuId>nttt<name>nttttBREAKFASTnttt</name>ntt</menu>nt</regularItems>n</terminal>n''';
  XmlDocument d = XmlDocument.parse(xmlString1);

  print(d.toXmlString(pretty: true));
}
 

Результат здесь.

Комментарии:

1. .toString(encodeCharacterEntities: false) сохранение XML в виде строки, но я хочу отформатировать XML-строку в XML-файле, как показано на скриншоте выше.

2. @Dev94, пожалуйста, ознакомьтесь с обновлением выше

3. Большое спасибо @jabbson. Это решение сработало.