如何使用XML格式化工具
- 把 XML 粘贴到输入框中:可以是 SOAP 信封、RSS 订阅源、网站地图、SVG 文件或配置文件。
- 点击格式化进行美化输出,每个元素占一行,缩进保持一致。
- 点击压缩去掉标签之间的空白,生成最紧凑的版本。
- 如果文档格式不良,检查器会报告出了什么问题以及出错位置,方便直接跳到问题所在。
- 把结果复制到编辑器或请求中。
解析在浏览器本地进行。粘贴的 XML 不会被上传或保存,因此可以放心处理内部 API 载荷和配置。
什么是XML,为什么要格式化?
XML(可扩展标记语言)是 W3C 标准,用带有可选属性的嵌套命名元素来表示结构化数据。它至今无处不在:SOAP 网络服务、RSS 和 Atom 订阅源、XML 网站地图、Microsoft Office 文件、Android 布局、Maven 的 pom.xml 文件以及 SVG 图形,全都是 XML。
软件生成的 XML 常常写在一行里,或者缩进不规则。美化输出能让层级结构一目了然,便于看清哪个元素属于哪个父元素,并发现放错位置的值。需要把 XML 嵌入另一个载荷或减小其体积时,压缩就很有用。
格式良好与有效的XML
这两个术语经常被混淆:
- 格式良好的 XML 遵循 XML 规范的语法规则:只有一个根元素、标签正确嵌套并闭合、属性值带引号、特殊字符已转义。每个 XML 解析器都要求满足这一点。
- 有效的 XML 是格式良好的,并且符合某个模式(DTD、XSD 或 RELAX NG),该模式定义了允许使用哪些元素和属性。
本工具检查的是格式是否良好。模式校验需要模式文件,通常在构建工具或 IDE 中完成。
常见的XML错误及修复方法
多于一个根元素。XML 文档必须恰好有一个顶层元素:
<item>A</item>
<item>B</item>
把这些同级元素包在一个父元素里:
<items>
<item>A</item>
<item>B</item>
</items>
标签不匹配或嵌套不当。标签必须按相反的顺序闭合,名称区分大小写,因此 <Name>…</name> 是错误的,<b><i>text</b></i> 也是错误的。
未转义的特殊字符。文本中单独出现的 < 或 & 会导致解析失败。请使用预定义的实体:
| 字符 | 实体 | 何时必须使用 |
|---|---|---|
< | < | 在文本和属性值中始终必须 |
& | & | 在文本和属性值中始终必须 |
> | > | 建议使用;在序列 ]]> 中必须使用 |
" | " | 在双引号括起的属性值中 |
' | ' | 在单引号括起的属性值中 |
例如,网站地图中的 URL 必须写成 <loc>https://example.com/?a=1&b=2</loc>。或者,把大段文本包在 <![CDATA[ … ]]> 区段中,其中的标记字符不会被解释。
未加引号的属性。与 HTML 不同,XML 要求每个属性值都加引号:应写 <user id="42">,而不是 <user id=42>。
XML 声明之前有内容。如果存在 <?xml version="1.0" encoding="UTF-8"?>,它必须是文件中的第一样东西。即使前面只有一个空格或空行,文档也会变得格式不良。
提示与最佳实践
- 声明编码并把文件保存为 UTF-8,以避免带重音符号的字符出现问题。
- 对空白有意义的文档(例如混合内容或使用
xml:space="preserve"的元素)进行美化输出时要小心;添加换行可能会改变文本的值。 - 一致地使用命名空间:像
soap:这样的前缀必须通过该元素或其祖先元素上的xmlns:soap属性来声明。 - 需要把 XML 嵌入 URL 或 JSON 字符串吗?请先用 URL编码与解码或 Base64编码与解码对它进行编码。
常见问题
HTML 和 XML 一样吗?
不一样。HTML 更宽容:它允许像 <br> 这样不闭合的元素、不加引号的属性以及不区分大小写的标签名。XHTML 是遵循 XML 规则的 HTML 变体。要整理普通网页,请改用 HTML格式化。
格式化会改变我的数据吗?
美化输出会在元素之间添加空白,而压缩会去掉空白。元素名称、属性和文本内容保持不变,但在文本内部的空白有意义的文档中,多出来的缩进可能会产生影响。
这个工具会按 XSD 模式进行校验吗?
不会。它只检查文档是否格式良好。按 DTD 或 XSD 校验需要模式文件和支持校验的解析器。
为什么我的 XML 在 & 符号处出错?
在 XML 中,& 始终表示一个实体引用的开始。单独出现的 & 符号(在 URL 和公司名称中很常见)必须写成 &,或者放进 CDATA 区段中。
更新于