XML:依然重要的数据格式

虽然JSON已经成为Web API的主流格式,但XML在许多领域仍然不可替代。SOAP Web服务、SVG图形、Android布局文件、Office文档(.docx、.xlsx本质上是ZIP压缩的XML)、Maven/Gradle构建配置、Spring配置文件——这些场景都离不开XML。理解XML格式化和校验技术,依然是开发者的必备技能。

XML(eXtensible Markup Language)与HTML同源,都来自SGML。但XML是更严格的规范:所有标签必须闭合,属性值必须加引号,标签名大小写敏感,必须有且仅有一个根元素。

XML格式化的核心规则

良好的XML格式化应该遵循以下规则:

  • 一致的缩进:使用2空格或4空格缩进,不要混合使用空格和制表符
  • 属性换行:当元素有多个属性时,每个属性独占一行并缩进对齐
  • 文本内容保留:不要格式化混合内容(标签与文本混合)的空白字符
  • 注释对齐:注释与同级元素对齐,不要随意缩进
  • 命名空间声明:命名空间声明放在根元素,使用有意义的前缀

特别注意:XML中的空白字符有时是有意义的(xml:space="preserve"),格式化工具不应该随意修改这些空白。

XML Schema校验

XML Schema(XSD)是XML文档的结构定义语言,比DTD更强大。XSD支持丰富的数据类型(string、integer、date、boolean等),可以定义复杂类型和简单类型的约束,支持命名空间。一个良好的XSD应该为每个元素和属性定义类型,设置合理的约束(minOccurs、maxOccurs、pattern等),添加annotation文档说明。

校验流程:先编写XSD定义文档结构,然后使用校验工具验证XML是否符合XSD。大多数XML编辑器都内置了实时校验功能,开发阶段应该始终开启校验。

命名空间详解

命名空间是XML中最容易出错的概念。命名空间的目的是避免元素名冲突——当同一个XML文档中使用多个词汇表时,不同词汇表可能有同名元素。命名空间通过xmlns属性声明,格式为xmlns:prefix="URI"。默认命名空间使用xmlns="URI"声明。

常见的命名空间陷阱:忘记声明命名空间导致解析错误;子元素不会自动继承父元素的默认命名空间(实际上会继承,需要明确理解);命名空间前缀只是别名,真正的标识是URI;属性不属于任何默认命名空间,必须使用前缀。

XPath:XML的查询语言

XPath是XML文档的路径查询语言,类似于文件系统路径。常用的XPath表达式:/bookstore/book选取所有book元素;//book从任意位置选取book元素;/bookstore/book[1]选取第一个book;//book[@lang='zh']选取lang属性为zh的book;//book/price>35选取价格大于35的book。XPath 2.0/3.0增加了更强大的函数和表达式能力。

XML与JSON互转的注意事项

XML和JSON的结构并不完全对等,互转时需要注意:XML属性在JSON中没有直接对应(通常用@前缀或特殊字段表示);XML的混合内容(标签与文本混合)在JSON中难以表达;XML的命名空间信息在转JSON时通常丢失;XML的注释和处理指令无法在JSON中表示;XML的元素顺序在JSON对象中可能丢失(JSON对象理论上无序)。

工具推荐

使用我们的在线XML格式化工具,一键美化或压缩XML,支持XPath查询测试、Schema校验和命名空间分析,帮助你高效处理XML数据。