#xml #flutter #dart
Вопрос:
Я хочу записать xml-строку в XML-файл. Я использую службу http для чтения xml-строки. После чтения xml-строки из службы я преобразую эту строку в форматированную строку, а затем записываю ее в XML-файл. Проблема в том, что отформатированная строка неправильно отображает XML — макет. Он показывает закрывающий и конечный тег в формате, который я выделил на скриншоте ниже:
Вот скриншот ответа сервера, и я также распечатал форматированную форму этой строки 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. Это решение сработало.