XML 格式化与验证器

粘贴 XML,点击格式化得到正确缩进的整洁 XML,或验证检查语法。处理属性和命名空间。无需上传。

  1. 将 XML 粘贴到左侧文本区。
  2. 点击「格式化」让其经过 fast-xml-parser 并产出带缩进的 XML。
  3. 点击「验证」只检查格式良好(well-formed),不修改输入。
  4. 错误会指出文档中的位置。
它能做什么?

使用 fast-xml-parser 解析 XML,然后以一致的缩进重新输出。每个元素内的属性顺序与元素嵌套都被原样保留。混合内容(文本 + 子元素)与命名空间(prefix:tag)也保持完整。输出是格式良好的 XML — 但「格式良好」不等于「有效」(有效性需要 schema 或 DTD,本工具不做校验)。

示例

杂乱的 XML 输入:

<root version="1"><name>Ada</name><tags>math</tags><tags>logic</tags></root>

格式化输出:

<root version="1">
  <name>Ada</name>
  <tags>math</tags>
  <tags>logic</tags>
</root>

常见 XML 错误及修复

XML 的 well-formedness 规则比 HTML 更严格。下列模式覆盖了大多数解析失败。

  • 未关闭的标签。 `<a><b></a>` 无效 — `<b>` 必须在某处关闭(`<b/>` 或 `</b>`)。XML 不允许 HTML 风格的可选闭合标签。
  • 大小写不匹配。 XML 区分大小写 — `<Foo></foo>` 是两个不同的标签名。请精确匹配大小写。
  • 未转义的特殊字符。 文本或属性值中的字面量 `<`、`>`、`&` 或引号必须转义: `&lt;`、`&gt;`、`&amp;`、`&quot;`。含此类字符的数据可用 CDATA 包裹: `<![CDATA[...]]>`。
  • 多个根。 XML 要求恰好一个根元素。最顶层 `<a/><b/>` 无效 — 用根包裹: `<root><a/><b/></root>`。
  • 无效的元素名。 元素名不能以数字开头、不能含空格,也不能使用保留字符(`< > & " \'`)。以 `xml`(任意大小写)开头的名称被规范保留。
  • 属性引号不匹配。 `<a name="value\'>` 混用了双引号和单引号。每个属性内请保持一致 — 两种都合法。
常见问题

格式化会改动我的数据吗?

只有元素之间的空白会变。元素顺序、属性顺序、属性值、文本内容、CDATA 包裹都会保留。自闭合(`<x/>`)与显式形式(`<x></x>`)可能会被规范化。

XML 注释会被保留吗?

fast-xml-parser 默认会丢弃注释。需要保留注释的格式化请用其他工具(例如 XSLT 同恒变换或 `xmllint --format`)。

会进行 schema 校验吗?

不会。本工具只检查 well-formedness — 文档能作为语法有效的 XML 解析。Schema 校验(XSD、DTD、RelaxNG)是单独步骤,需要把 schema 作为额外输入。

命名空间如何处理?

命名空间前缀作为元素名的一部分(`x:foo`)保留。默认命名空间声明与前缀绑定作为属性保留。不会执行命名空间感知处理(URI 解析)。

我的 XML 会被上传吗?

不会。一切都在你的浏览器里运行 — 输入由本页 JavaScript 解析与重新序列化,从不发送到任何服务器。

可以自定义缩进吗?

当前每级固定为 2 空格。要自定义,可在命令行运行同一个库 fast-xml-parser,并传入 `{ indentBy: " " }` 或任何字符串。