接口响应、配置片段或导出的 XML 经常挤在一行里。要找某个节点属于谁、少了哪个结束标签,可以先放进宝塔拨测的 XML 格式化工具,把层级展开再看。需要重新贴回只接受紧凑文本的位置时,再用“压缩”去掉工具生成的排版换行。

这两个按钮都作用于同一个编辑框。操作前先留一份原文,尤其是准备覆盖配置文件时,方便比较处理前后的差别。

先把层级展开

在工具列表选择“XML格式化”,用下面这段虚构数据替换编辑框中的默认示例:

<catalog><item id="demo-01"><name>演示 &amp; 测试</name><enabled>true</enabled></item><item id="demo-02"><name>备用</name></item></catalog>

点击“校验 / 格式化”。本次结果把两个 item 分别展开,name 和 enabled 缩进到对应的 item 下面,左侧行号也随之更新。这样查第二个商品名称时,就能先定位 id="demo-02",不用在长行里逐个数标签。

点击校验与格式化后,查看两个 item 的缩进层级和开头新增的 XML 声明
点击校验与格式化后,查看两个 item 的缩进层级和开头新增的 XML 声明

本次输入没有 XML 声明,处理后开头补出了 <?xml version="1.0" encoding="UTF-8"?>。因此它输出的是重新排版后的 XML 文本,不能把这次操作理解为“只改了空格,其他字符绝对不变”。如果下游系统对声明有特别要求,复制前要一起核对。

示例名称里的 &amp; 仍以转义形式保留。XML 文本中想表示普通的 &,应按语法写成 &amp;;不要因为看到页面显示了这几个字符,就手动把它改回裸 &。

压缩后看的是文本行,不是网络压缩包

在格式化结果上继续点击“压缩”,节点之间的排版换行被去掉,XML 声明与根节点也连在同一行。编辑框宽度不够时可能视觉折行,但这不代表文本里重新插入了换行。

点击压缩后,XML 声明与节点连在同一行,长文本会随编辑框宽度显示折行
点击压缩后,XML 声明与节点连在同一行,长文本会随编辑框宽度显示折行

这里的“压缩”得到的仍是 XML 字符串,不是 ZIP 文件,也不是 HTTP 传输里的 gzip。它适合把排版用的空白收紧,不能据此判断服务器的传输压缩是否开启。

对于这份商品数据,整理前后容易逐项比较:两个 id、两段名称以及 enabled 都还在。涉及文章段落、混合文本或刻意保留空白的内容时,应另存结果再比较,别直接覆盖原文。能成功处理一份普通节点示例,并不表示所有 XML 文档的空白都可随意移除。

报错时先修标签,再重新格式化

把输入换成下面这段故意缺少 </item> 的文本:

<catalog><item>演示</catalog>

点击“校验 / 格式化”,编辑框下方出现红色解析错误,本次提示包含 Unexpected closing tag: catalog != item。它表示解析到 </catalog> 时,当前等待关闭的还是 item。

错误标签示例保留在编辑框中,下方红色提示指出 catalog 与 item 的结束标签不匹配
错误标签示例保留在编辑框中,下方红色提示指出 catalog 与 item 的结束标签不匹配

修正方法是在“演示”后补上 </item>,让内层先结束,再结束 catalog,然后重新点击按钮。若提示行号和列号,先看附近的开始标签与结束标签是否配对、是否交叉,再检查引号和转义字符。错误可能由更前面的缺口引起,不必只盯着提示位置的单个字符。

这一步检查的是 XML 能否按语法解析。本工具没有让读者上传 XSD、DTD 或业务规则的操作;格式化完成不能证明接口字段齐全、字段类型符合约定,更不能证明这份配置导入后会生效。准备交给业务系统使用时,还应按该系统的字段要求核对。