
XML(Extensible Markup Language,可扩展标记语言),那什么是标记语言?
我们常见的 HTML(HyperText Markup Language,超文本标记语言),一般后缀是 ,那么 XML 一般就是 。.html.xml
标记语言,简单来说,就是通过添加标签,来给数据赋予意义。
像 HTML 里的 、、、,这些用 和 包起来的东西,都是标签,而且它们都有自己的含义。比如 表示网页标题。htmlheadtitlebody<>title
在早期,每个软件公司都用自己的私有格式来存储数据。系统和系统之间一交换数据,经常会出现一种情况:
我发给你了,但你读不懂。
这样一来,数据交换就很麻烦。
后来,SGML 出现了,它的核心思路其实很对:
把数据的结构和内容分开,然后用“标签”来描述内容是什么。
<姓名>张三</姓名>
<年龄>25</年龄>
这样做思路很好,但 SGML 太复杂了。因为它太强了,强到很多规则都可以自己定义,什么都想兼容,结果就是学习成本高、实现成本也高。
接下来是 HTML,像这样:
<h1>标题</h1>
<p>段落</p>
<b>加粗</b>
它解决了“页面展示”的问题,但是它不擅长表达“数据本身是什么”。
<b>25</b> <!-- 这是年龄?价格?编号? -->
所以 XML 就诞生了。
W3C(万维网联盟)意识到:互联网需要一种既简单,又能描述数据含义的语言。于是它精简了 SGML,最后得到 XML。
它的优点大致有这几个:
首先,XML 的最小单位叫:元素。
一个元素由三部分组成:
<姓名>张三</姓名>
开始标签 内容 结束标签
规则很简单:
开了就必须关,不然就报错。
这是 XML 很强大的地方。
<订单>
<客户>
<姓名>张三</姓名>
<电话>138-0000-0000</电话>
</客户>
<商品>
<名称>笔记本电脑</名称>
<价格>8999</价格>
<数量>1</数量>
</商品>
</订单>
你会发现,它很像树状结构,一层包一层。
并且 XML 还有一条很重要的规则:
永远只能有一个根元素
在上面这个例子里, 就是根元素。像 、 这些,都属于它下面的子元素。<订单></订单><客户><商品>
如果你这样写:
<订单>
<客户>
<姓名>张三</姓名>
<电话>138-0000-0000</电话>
</客户>
</订单>
<商场>
...
</商场>
那就会报错,因为根元素不止一个了。
属性,你可以把它理解成贴在元素上的便利贴。
<学生 学号="2024001" 性别="男">
<姓名>张三</姓名>
</学生>
那什么时候用属性,什么时候用子元素?
你可以先这样理解:
也就是说,属性更像“补充说明”,子元素更像“真正内容”。
很多 XML 文件,开头都会先写一行声明:
<?xml version="1.0" encoding="UTF-8"?>
这行最常见的作用,就是说明:
特别是编码,很重要。因为一旦编码不统一,中文就容易乱码。
上面其实已经零散说了一些规则,这里统一总结一下:
比如嵌套这条,正确写法应该像这样:
a b b a
不能写成:
a b a b
那这里可能会想到一个问题:
<>&这些本身就是特殊符号,如果我内容里面也要用怎么办?
那就得用转义写法:
<写成<>写成>&写成&"写成"'写成'举个例子:
<公式>3 < 5 && 10 > 8</公式> <!-- 错误 -->
<公式>3 < 5 && 10 > 8</公式> <!-- 正确 -->
像这些地方都能看到 XML:
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="登录"
android:layout_width="wrap_content"/>
</LinearLayout>
<project>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
</project>
可以看出,它们都符合 XML 的规则。
看到这里,很多人会想:
既然 XML 这么啰嗦,那它为什么到现在还没消失?
原因也不复杂,因为它在有些场景里,确实很好用。
比如:
说白了:
XML 不一定轻,但它稳。
后面又衍生出了 JSON,那 JSON 为什么会出来?
先看它的结构:
{
"姓名": "hzh",
"年龄": 20,
"专业": "计算机科学"
}
再对比一下 XML:
<学生>
<姓名>张三</姓名>
<年龄>20</年龄>
<专业>计算机科学</专业>
</学生>
很明显,JSON 所占体积更小,写起来也更轻。
那为什么不直接全用 JSON,还要用 XML 呢?
因为它们擅长的地方不完全一样。
而且 JSON 也不是只有字符串和对象,它还能表示:
null所以更准确的说法不是“JSON 没有结构”,而是:
JSON 的结构更轻,XML 的结构更严格。
所以不是谁彻底干掉谁,而是它们解决的问题并不完全一样。
XML的核心价值,其实就一句话:
它不是为了把数据写得最短,而是为了把数据写得有结构、有含义、有规则。
所以你会发现:
也正因为这样,XML 虽然看起来有点啰嗦,但到今天依然还在很多地方被使用。