XML 格式化与验证工具
粘贴 XML,即可按 2 个空格、4 个空格或制表符缩进,压缩成一行,或查明它为何无法解析。格式良好的 XML 会返回元素数、嵌套深度和大小;格式错误的 XML 则会返回解析器的提示信息。免费,无需注册,XML 永远不会离开您的浏览器。
模式
如何使用 XML 格式化工具
- 1. 选择模式。 格式化进行美化排版;压缩去除元素之间的空白。
- 2. 选择缩进。 选择“格式化”时,可在 2 个空格、4 个空格或制表符之间选择。
- 3. 粘贴 XML 并点击按钮。 结果会显示在下方,包含三项统计:元素数、最大深度(根元素为第 1 层)以及输出大小(字符数)。
- 4. 如有错误请修正。 如果 XML 不是格式良好的,则不会输出任何内容,您的浏览器解析器会报告它发现的问题。修正 XML 后再次点击按钮即可。
格式良好与有效
“验证” XML 可能指两件不同的事。如果文档遵循 W3C 的 XML 1.0 推荐标准 中的语法规则,它就是格式良好的;如果它还遵循 DTD 或 XSD 等模式,它就是有效的。本工具只检查格式良好性,使用您浏览器内置的 XML 解析器完成。它不读取 DTD 或模式,因此格式良好但不符合您应用需求的文档(例如缺少必需的元素)也会通过检查。它执行的规则如下:
| 规则 | 何时出错 |
|---|---|
| 只有一个根元素 | 存在两个顶层元素,或根元素之前有文本 |
| 元素正确嵌套 | <a><b></a></b> |
| 每个起始标签都有对应的结束标签 | <a><b></a>,或用 <br> 代替 <br/> |
| 名称区分大小写 | <Title>…</title> |
| 属性值必须加引号 | <a id=1/> |
| 同一元素上不能有重复的属性 | <a id="1" id="2"/> |
文本中的 < 和 & 必须转义 | <a>5 < 6 & 7</a> 应写为 5 < 6 & 7 |
XML 只定义了五个预定义实体——<、>、&、' 和 "——因此 这样的 HTML 实体,除非由 DTD 声明,否则都是错误。对于未闭合的标签,提示信息是浏览器的措辞,且因浏览器而异,它会指出不匹配的标签对:在 Chrome 中,<a><b></a> 会在第 1 行第 11 列报告错误,信息为“Opening and ending tag mismatch: b line 1 and a”。
格式化工具会改动什么
本工具先把您的 XML 解析成一棵树,再把这棵树写回输出,因此输出的是等价的 XML,只是排版更整洁,而不是您原文的副本。您会注意到以下差异:
- 保留声明与 DOCTYPE。 开头的
<?xml …?>行以及<!DOCTYPE …>声明(包括内部子集)会按您输入的原样写回。 - 属性 保持原有顺序,但会改写为双引号。
- 实体被解析。
'和©之类的字符引用会还原为字符本身;只有文本中的&、<和>,以及属性中的",会被重新转义。 - 空元素自动闭合。
<a></a>在没有内容时会变为<a/>,但只含一个空格的元素会保持为<a></a>。 - 注释、CDATA 区段和处理指令 均会保留。
示例
这份单行文档包含一个声明、一个单引号属性、一条注释和一个空元素:
输入
<?xml version="1.0" encoding="UTF-8"?><library><book id='1'><title>APA Manual</title><year>2020</year><!-- note --></book><book id="2"/></library>
格式化,2 个空格
九行,共 172 个字符:声明在前,library 顶格,每个 book 缩进两个空格,而 title、year 和注释则缩进四个空格。第一本书的 id 现在写作 id="1"。
压缩
一行,共 146 个字符。
统计
5 个元素,最大深度为 3(library、book、title)。
压缩会保留声明,并把整棵树放在一行上,因此同一份文档从 172 个字符缩减为 146 个字符。输出大小卡片显示的就是这些字符数。
您需要哪个工具?
本页面针对 XML。对于 HTML(它能容忍未闭合的标签并保持行内间距),请使用 HTML Formatter。若要把 XML 转为 JSON 数据,计划中的 XML to JSON Converter 会展示属性和重复元素如何映射;至于 JSON 本身,请使用 JSON 格式化工具。
常见问题
- XML 格式化工具是做什么的?
- 它会重新缩进 XML,使嵌套关系一目了然,通常每个元素占一行。本工具还会检查 XML 是否格式良好,因为它必须先解析文档,才能以新的排版把它写回。
- 这里的 XML 验证是如何工作的?
- 您浏览器内置的 XML 解析器会读取文本。如果 XML 违反了语法规则,将显示解析器的错误,且不产生任何输出。它只检查格式良好性,不会依据 DTD 或 XSD 模式进行验证。
- 注释、CDATA 区段和属性会被保留吗?
- 会:注释和 CDATA 区段会按原样写回,属性保持原有顺序,但引号会统一为双引号。DOCTYPE 声明会按您输入的样子写回。
- 压缩是做什么的?
- 它会去除元素之间的空白和换行,得到等价的最短文本,并在存在 XML 声明时予以保留。
<title>等元素内部的文本会保留其空格,与子元素并列的文本也是如此,例如带有一个加粗词语的段落。 - 为什么格式化会改变我的文本间距?
- 只有在格式化混合内容时才会发生,即与子元素并列的文本,例如带有加粗词语的段落。“格式化”会修剪这段文本并把每一部分放到单独一行,从而改变空白;“压缩”则会保留空白。数据型 XML(即元素要么包含文本、要么包含其他元素)不受影响。
- 为什么包含 的 XML 会失败?
- XML 只有五个预定义实体,而
不在其中。请把它替换为数字引用 ,或在 DTD 中声明该实体。 - 我的 XML 会被上传到服务器吗?
- 不会。解析和格式化都在您的浏览器中完成,您粘贴的内容不会被发送到任何地方。