
什么是 XML?
XML(可扩展标记语言)是一种标记语言,旨在以人类可读且机器可读的格式存储和传输数据。与 HTML(定义了一组固定标签)不同,XML 允许您定义自己的标签,因此在表示任何结构化数据时具有高度灵活性。
XML 由 W3C 于 1998 年开发,至今仍广泛应用于企业系统、SOAP Web 服务、文档格式(DOCX、SVG、RSS)以及配置文件(Maven、Spring、Android)。
XML 与 HTML 的主要区别
| 特性 | XML | HTML |
|---|---|---|
| 目的 | 数据存储和传输 | 网页结构 |
| 标签名称 | 自定义,用户定义 | 固定(div, p, span...) |
| 大小写敏感 | 大小写敏感 | 大小写不敏感 |
| 闭合标签 | 必须 | 部分可选 |
| 自闭合 | 空元素必须 | 可选 |
| 错误处理 | 严格(格式错误即无效) | 宽松(浏览器猜测) |
XML 语法规则
XML 有严格的语法要求:
恰好一个根元素:每个 XML 文档有一个根元素,包含所有其他元素。
标签大小写敏感:
<Name>和<name>是不同的元素。所有标签必须闭合:要么
<tag></tag>,要么自闭合<tag />。正确嵌套:标签必须正确嵌套(不能重叠):
错误:<b><i>text</b></i> 正确:<b><i>text</i></b>属性值必须加引号:
<element attr="value">或单引号。特殊字符必须转义:
& -> & < -> < > -> > " -> " ' -> '
格式良好 vs 有效 XML
格式良好的 XML 遵循所有语法规则。任何 XML 解析器都会接受它。
有效的 XML 还符合模式(DTD 或 XSD)。有效性是可选的,但对数据交换很重要。
XML 结构示例
<?xml version="1.0" encoding="UTF-8"?>
<library xmlns="http://example.com/library">
<book id="1" category="fiction">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<year>1925</year>
<price currency="USD">12.99</price>
</book>
<book id="2" category="technical">
<title>Clean Code</title>
<author>Robert C. Martin</author>
<year>2008</year>
<price currency="USD">35.99</price>
</book>
</library>
命名空间
XML 命名空间可防止在合并来自不同来源的 XML 时发生名称冲突:
<root
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:svg="http://www.w3.org/2000/svg">
<html:div>HTML content</html:div>
<svg:circle cx="50" cy="50" r="10"/>
</root>
现代开发中的 XML
虽然 JSON 在很大程度上取代了 REST API 中的 XML,但 XML 在以下场景中仍然必不可少:
- SOAP Web 服务:在企业环境(银行、医疗)中仍然常见
- Office 文档:DOCX、XLSX、PPTX 是包含 XML 文件的 ZIP 压缩包
- SVG 图形:可缩放矢量图形基于 XML
- RSS/Atom 订阅:Web 内容聚合使用 XML
- Android:布局文件、AndroidManifest.xml
- Maven/Gradle:Java 构建配置
- Spring:应用上下文和配置
- XSLT:用于将 XML 转换为其他格式的 XML 转换语言
XPath:查询 XML
XPath 是一种用于选择 XML 中节点的查询语言:
/library/book[@category='fiction'] # 选择小说类书籍
/library/book/title # 选择所有标题
//book[price > 20] # 价格超过 20 的书籍(文档中任意位置)
/library/book[last()] # 最后一本书
count(/library/book) # 统计所有书籍数量
使用此工具
粘贴任何 XML 文档,即可立即使用适当的缩进和语法高亮进行格式化和美化。该工具还会验证 XML 语法,并报告带有行号的具体错误。
-> 试试 XML 格式化工具