把挤成一行的 XML 排成带缩进, 带语法高亮的结构, 方便肉眼看层级. 它不改变标签, 属性和文本内容, 只重排空白.
输入: <root attr="1"><item>hello</item><empty/></root>
输出:
<?xml version="1.0" encoding="utf8"?>
<root attr="1">
<item>hello</item>
<empty/>
</root><?xml ... ?> 声明, 带换行都可以); pom.xml, Android 布局文件, Office 配置片段贴出来给人看之前先排版; <empty/> 保持自闭合写法, 不会被展开成一对标签; ns:item, xmlns:ns="...")原样保留在同一行; <b>)不会被解开或二次转义; <?xml version="1.0" encoding="utf8"?> 声明. 工具统一按自己的声明输出, 会覆盖你输入里的版本号和编码. 这里有两点要注意: ① 严格讲 XML 规范里的合法写法是 utf-8, utf8 是 Java 等解析器普遍接受的别名, 但如果这份 XML 要交给严格的校验器或写进标准配置文件, 复制走之后手工改成 encoding="UTF-8"; ② 声明里的编码只是"这段字节用什么编码"的承诺, 改声明并不会转换你的文本编码, 真要转编码得用 iconv 之类的工具.
本质是解析失败, 最常见的三类: ① 标签没闭合或引号缺失(例如 <a><b>1</b> 少了根节点的闭合); ② 内容根本不是 XML, 或者粘的是一串 JSON; ③ 复制时被截断, 末尾缺了闭合标签 -- 日志和接口返回被截断时最容易这样. 逐层检查闭合标签, 或者先用编辑器把缺失的尾部补齐再试.
不能. XML 文档只允许一个根元素, 一段文本里出现两个并列根节点, 或前后带日志前缀都会解析失败. 正确做法是把报文本体单独摘出来, 必要时临时套一层 <root>...</root>.
本页只排版, 不改变数据形态, 看完还得靠人读结构; XML 转 JSON 是把 XML 转成 JSON 对象, 方便程序处理或字段比对. 转换是有损的: 同名元素会变数组, 纯文本元素的属性会被丢弃, 所以"看清楚原报文"这件事还得用格式化.
会 -- 解析在服务端完成, XML 内容作为请求参数发送到接口, 只用于这一次排版, 页面没有账号体系也不会展示给其他访问者. 含账号, 身份证, 卡号, 密钥的报文请先脱敏再粘.