XML全称是Extensible Markup Language,中文叫作可扩展标记语言。它并不是一种编程语言,而是一种用来存储和传输数据的文本文件格式。与常见的二进制文件不同,xml文件以纯文本形式保存,里面通过成对出现的标签来描述数据的含义和层级关系。这种格式的设计目标是让数据具备自我描述能力,也就是看到标签就能大致明白里面装的是什么内容。

xml文件的基本结构
一个标准的xml文件通常由声明、根元素以及若干子元素组成。文件开头一般有一行版本声明,用来告诉解析器当前文档遵循的xml规范版本和字符编码。紧接着是唯一的根元素,所有其他数据都必须放在这个根标签内部,形成一棵倒挂的树。
下面是一段最简单的xml示例,描述了一本图书的基础信息。注意所有的标签都是用户自己定义的,这也是“可扩展”的含义所在:你完全可以按照业务需要设计标签名,而不必拘泥于固定字段。
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1">
<title>深入理解计算机系统</title>
<author>布莱恩特</author>
<price>139.00</price>
</book>
</library>
在上面代码中,<library>是根元素,<book>带了一个名为id的属性,内部又嵌套了<title>、<author>等子元素。这种结构非常直观,无论是人工校对还是程序解析都很方便。
xml与html的区别
很多人容易把xml和html搞混,因为两者都使用尖括号标签。但html是用来展示数据的,它有一套预定义好的标签比如<p>、<div>,浏览器知道怎么把它们变成网页;而xml是用来携带数据的,标签含义由使用者自己规定,本身不具备任何显示样式。
举个例子,html里写<table>浏览器就会画出表格,但xml里写<table>仅仅表示“这是一组表格相关数据”,至于怎么呈现由其他程序决定。此外,xml对语法要求极其严格:标签必须闭合、大小写敏感、属性值必须加引号,而html在这些方面相对宽松。
| 对比维度 | XML | HTML |
|---|---|---|
| 设计目的 | 数据传输与存储 | 数据展示 |
| 标签来源 | 用户自定义 | 标准预定义 |
| 语法严格度 | 非常严格 | 相对宽松 |
xml常见的应用场景
虽然现在轻量的json在Web接口中更流行,但xml并没有消失。在配置文件领域,很多成熟框架依然偏爱xml,例如早期Spring、MyBatis以及安卓的布局文件。原因是xml支持注释、文档类型定义(DTD)和XML Schema校验,能在启动前发现结构错误。
另外在办公文档方面,Word的docx、Excel的xlsx其实都是用zip打包后的xml集合。把一个xlsx后缀改成zip解压,就能看到里面一堆描述单元格和样式的xml文件。这种基于xml的格式让文档结构开放且易于程序批量生成。
// Java中通过DOM解析xml文件的简单示例
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class XmlDemo {
public static void main(String[] args) throws Exception {
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse("book.xml");
NodeList titles = doc.getElementsByTagName("title");
for (int i = 0; i < titles.getLength(); i++) {
System.out.println(titles.item(i).getTextContent());
}
}
}
上面这段Java代码演示了如何用标准库加载一个xml并取出所有书名。可以看出,只要格式合法,各种语言都提供了现成的解析器,开发者不需要自己切字符串。
如何打开和编辑xml文件
由于xml本质是文本,用系统自带的记事本就能打开。但如果想看得舒服,建议使用专用编辑器如VS Code、Notepad++,它们能自动折叠节点、高亮标签,还能校验是否少写了结束标签。
如果你只是偶尔查看,直接改后缀为.txt或用浏览器打开也行,现代浏览器会把它渲染成可折叠的树形视图。不过要注意,从网络下载的xml不要随意用未知程序打开,防止里面嵌入的外部实体读取本地文件,这是xml解析中常见的安全风险,专业说法叫XXE注入。
小结:xml是一种通过自定义标签组织数据的纯文本格式,结构清晰、跨平台且易被程序解析,适合配置、文档和早期数据交换场景。