xml - XmlDocument 未正确解析 xml 字符串
问题描述
我想将 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');
}
}
任何人都请帮助我如何解决这个问题。
提前致谢。
解决方案
围。根据文档:
默认情况下,仅对 &、< 和 > 字符进行编码。
查看.toString(encodeCharacterEntities: false)
方法。
升级版:
同样根据相同的文档,
toFormattedString 目前相当初级,我想在某个时候为其添加其他格式选项)。
尝试另一个库,例如这个。这是一个如何解析和美化字符串的示例:
import 'package:xml/xml.dart';
void main(List<String> arguments) {
String xmlString1 =
'''<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n<terminal>\n\t<favItems>\n\t</favItems>\n\t<regularItems>\n\t\t<menu>\n\t\t\t<menuId>\n\t\t\t\t1\n\t\t\t</menuId>\n\t\t\t<name>\n\t\t\t\tLUNCH\n\t\t\t</name>\n\t\t</menu>\n\t\t<menu>\n\t\t\t<menuId>\n\t\t\t\t2\n\t\t\t</menuId>\n\t\t\t<name>\n\t\t\t\tBREAKFAST\n\t\t\t</name>\n\t\t</menu>\n\t</regularItems>\n</terminal>\n''';
XmlDocument d = XmlDocument.parse(xmlString1);
print(d.toXmlString(pretty: true));
}
结果在这里。