Flutter中XmlDocument解析XML字符串后格式化输出异常求助
Flutter XmlDocument格式化XML标签异常解决方案
核心修复步骤
- 调整XmlDocument构造参数
将trimWhitespace参数设置为false,该参数为true时会强制清除所有标签间的空白字符,破坏XML原始嵌套结构的标识,导致格式化时标签错位、闭合规则异常。 - 调整格式化方法配置
调用toFormattedString时手动指定缩进和换行规则,避免系统默认配置导致的排版异常:String formattedXml = xmlDocument.toFormattedString(indent: ' ', newline: '\n'); - 替换为官方xml包的稳定解析逻辑(推荐)
如果你使用的是第三方XML解析库,建议替换为Dart官方维护的xml包,解析和格式化的稳定性更高,示例代码如下:// 先在pubspec.yaml中引入依赖:xml: ^6.5.0 import 'package:xml/xml.dart'; import 'dart:convert'; // 替换原有解析写入逻辑 if (success == 1) { String rawXml = mapobject['Layout']['xml_Save']; // 可先注释格式化直接写入原始XML,验证服务端返回内容本身是否合法 // xmlFile.writeAsStringSync(rawXml, encoding: utf8); XmlDocument xmlDocument = XmlDocument.parse(rawXml); String formattedXml = xmlDocument.toXmlString(pretty: true, indent: ' '); // 写入文件时指定UTF-8编码,避免特殊字符、中文乱码 xmlFile.writeAsStringSync(formattedXml, encoding: utf8); await parseXmlData(formattedXml); } - 原始XML转义校验
打印输出mapobject['Layout']['xml_Save']的内容,确认XML标签没有被二次转义(比如<被转义为<),如果存在转义需要先完成XML反转义再做解析。 - 自闭合标签适配
如果你需要强制所有标签都使用完整闭合格式而非自闭合格式,可以遍历XML节点,将自闭合节点手动替换为内容为空的完整闭合节点后再生成格式化字符串。
内容的提问来源于stack exchange,提问作者Dev94
相关产品推荐
相关产品推荐

