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