Skip to content

XML 验证器

确保您的 XML 文档是正确的,这对于互操作性和处理至关重要。

正确性有两个级别:格式良好性 (Well-formedness) 和有效性 (Validity)。

一个格式良好的 XML 文档遵循基本的 XML 语法规则:

  • 必须有一个根元素。
  • 所有元素必须有闭合标签或自闭合。
  • 标签区分大小写。
  • 元素必须正确嵌套。
  • 属性值必须加引号。
  • 特殊字符必须转义(例如,< 用 &lt;,& 用 &amp;)。

XML 解析器要求文档格式良好。语法错误(即“格式错误”的文档)通常会立即停止处理。

这种严格性与 HTML 形成对比,HTML 浏览器通常会尝试渲染即使是格式不好的文档。

一个有效的 XML 文档不仅格式良好,而且还符合由模式 (schema) 定义的特定结构和规则集。

可以将模式视为 XML 文档的蓝图或契约。它定义了:

  • 允许使用哪些元素。
  • 元素的顺序和嵌套关系。
  • 每个元素允许的属性。
  • 元素内容和属性值的数据类型(使用 XSD 时更强大)。
  • 默认值和约束。

验证是将 XML 文档与其模式进行对照检查的过程。

有两种主要的语言用于定义 XML 模式:

DTD 是定义 XML 结构的原始方式。它们可以嵌入在 XML 文档中,也可以作为外部文件引用。

DTD 引用示例 (外部):

<!DOCTYPE note SYSTEM "note.dtd">

DTD 有局限性:它们对命名空间的支持不好,并且数据类型集合非常有限(主要基于文本)。

XSD 是 W3C 推荐的现代、更强大的标准。XSD 本身就是 XML 文档,这使得它们具有可扩展性并且更容易解析。

XSD 相较于 DTD 的主要优势:

  • 丰富的内置数据类型集合(整数、小数、布尔值、日期等)。
  • 能够定义自定义数据类型和限制(模式、范围)。
  • 完全支持 XML 命名空间。
  • 对结构和内容更具表达力的约束。
  • 使用 XML 语法编写。

在新开发中通常首选 XSD。

验证提供了多种好处:

  • 数据完整性:确保 XML 数据在处理之前符合预期的结构和类型。
  • 互操作性:在系统之间交换 XML 时,对照共享模式进行验证可确保双方都能正确理解和处理数据。
  • 错误预防:及早捕获结构错误,防止在消费 XML 的应用中出现运行时问题。
  • 文档:模式本身可作为预期 XML 格式的清晰文档。

各种工具和库可以执行 XML 验证:

  • 在线验证器:您可以粘贴 XML 和模式内容以检查有效性的网站。
  • XML 编辑器:许多文本编辑器和 IDE(例如带有扩展的 VS Code、Oxygen XML、XMLSpy)具有内置的验证功能。
  • 编程库:大多数编程语言都有库(例如 Python 中的 lxml、.NET 中的 System.Xml、Java 中的 JAXP),允许对 DTD 或 XSD 模式进行程序化验证。
  • 命令行工具:像 xmllint 这样的工具可以在命令行中验证文件。

在开发或消费 XML 时,将验证集成到工作流程中是一种最佳实践。