XML 是什么:它和 HTML、JavaScript 有什么区别,用来做什么
XML 是一种用自定义标签描述结构化数据的标记语言。它不负责显示页面,也不负责执行逻辑,而是把数据组织成有层级、可被程序读取的文本格式。如果你需要让不同系统之间交换数据、保存配置,或者处理 RSS、SVG 这类基于 XML 的格式,就需要理解它。它和 HTML、JavaScript 不是替代关系:HTML 管展示,JavaScript 管行为,XML 管数据。
XML 的核心特征
XML 的全称是 Extensible Markup Language,即可扩展标记语言。它的“可扩展”体现在标签名由你自己定义,而不是像 HTML 那样只能使用固定标签。
一个最小的 XML 文档长这样:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>深入理解计算机系统</title>
<author>Randal E. Bryant</author>
<price currency="CNY">139</price>
</book>
这段代码里有几个基本结构:
- 声明:
<?xml version="1.0" encoding="UTF-8"?>说明版本和编码,通常放在第一行。 - 根节点:
<book>是整份文档的唯一根元素,所有其他元素都包在它里面。 - 元素:
<title>、<author>、<price>是自定义标签,成对出现,中间是内容。 - 属性:
currency="CNY"是挂在元素上的附加信息。
XML 对格式要求很严格:标签必须闭合、大小写敏感、属性值必须加引号、只能有一个根节点。少一个闭合标签,解析就会失败。
XML 和 HTML 的区别
两者都使用尖括号标签,但目的完全不同。
| 维度 | XML | HTML |
|---|---|---|
| 用途 | 描述和传输数据 | 展示网页内容 |
| 标签 | 自定义,无预定义含义 | 固定,如 <p>、<div> |
| 语法严格度 | 非常严格,错误即解析失败 | 相对宽松,浏览器会容错 |
| 关注点 | 数据是什么 | 数据长什么样 |
举例来说,<title> 在 HTML 里表示页面标题,浏览器知道怎么渲染;而在上面的 XML 里,<title> 只是我自定义的一个数据字段,浏览器不会自动显示它。XML 本身不包含任何样式信息,要显示就得配合 CSS 或 XSLT。
XML 和 JavaScript 的关系
JavaScript 不“属于”XML,但可以读取和处理 XML 数据。常见方式有两种:
- 通过 DOM 解析:浏览器内置
DOMParser,可以把 XML 字符串转成可遍历的 DOM 对象。
const xmlString = `<book><title>示例</title></book>`;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
console.log(xmlDoc.querySelector("title").textContent); // 示例
- 通过 fetch 获取远程 XML:拿到响应文本后,同样用
DOMParser解析,再提取字段渲染到页面。
预期结果是:JavaScript 负责“取数据”和“用数据”,XML 只负责“存数据”。这也是前后端分离中常见的数据交换模式之一,只不过现在更多用 JSON 替代 XML。
XML 常见的使用场景
- 配置文件:如 Maven 的
pom.xml、Android 的布局文件。 - 数据交换:早期 Web Service(SOAP)用 XML 传输请求和响应。
- 文档格式:Office 的
.docx、.xlsx本质是 zip 包内的 XML 文件集合。 - 图形与订阅:SVG 矢量图、RSS/Atom 订阅源都基于 XML。
- 行业标准:医疗、金融等领域存在大量基于 XML 的数据规范。
为什么现在更多用 JSON
XML 表达能力强,但代价是冗长。同样的数据,JSON 通常更短、更易读,且与 JavaScript 天然兼容。
{
"book": {
"title": "深入理解计算机系统",
"author": "Randal E. Bryant",
"price": { "currency": "CNY", "value": 139 }
}
}
对比可见,JSON 省去了大量闭合标签,解析也更直接。因此在现代 Web API 中,JSON 已成为主流。但 XML 并未消失:在需要严格 schema 校验、命名空间、复杂文档结构的场景,它仍有不可替代的位置。
什么时候该用 XML
- 你需要一套可校验的数据结构规范(如 XSD),且对格式约束要求高。
- 你要处理已有系统或行业标准输出的 XML 数据。
- 你要编写 Maven、Android 等特定工具的配置文件。
- 你要处理 SVG、RSS 这类本身就是 XML 的格式。
如果只是前后端传几个字段的普通接口数据,JSON 通常更省事。选择哪种格式,取决于数据复杂度、校验需求和对接方的既有约定,而不是哪个“更高级”。