XML 从看懂到会写

🎉摘要:本文简单介绍XML(可扩展标记语言),它是一种用于存储和传输数据的纯文本格式。内容涵盖XML的核心特点、基本结构、语法规则速记,并通过完整代码示例展示其用法。

XML 这玩意儿其实没多复杂,说穿了就一句话 —— 它是一种用来存数据和传数据的纯文本格式。你把它理解成一个带标签的记事本就行。

例如:使用 XML 描述一本书的名称、作者和价格。

<book>
    <name>Python</name>
    <author>John Doe</author>
    <price>29.99</price>
</book>

注意,上面 XML 中的 book、name、author 标签名都是我们自己定义的,你可以根据自己的喜好进行修改。

很多人第一次听到 XML 会想到 HTML,确实长得有点像,但它俩干的活儿完全不一样:HTML 负责把页面画出来给人看,XML 只管把数据整理清楚,不关心好不好看。也正因为这样,不管是人还是程序,读 XML 都很轻松。

 

核心特点

聊几个 XML 最突出的地方,知道这些你就能理解为什么这么多年它一直没被淘汰:

标签随便起名

XML 不像 HTML 那样规定死了只能用 <div>、<p>、<span> 这些标签。你想叫 <student>、<order>、<product> 都行,完全按业务需求来。这意味着你可以用最贴近业务的语言去描述数据,不用迁就一套固定的标签体系。

天然就是树形结构

标签一层套一层,自然形成父子关系,特别适合表达那种“一个东西下面有好几个子项”的数据。比如一个班级下面有若干学生,每个学生有姓名和成绩 —— 这种层级关系用 XML 写出来一目了然。

跨平台,到处都能用

XML 不依赖任何特定的操作系统或编程语言。你可以在 Windows 上生成一个 XML 文件,传到 Linux 服务器上解析,或者用 Java、Python、C# 随便哪种语言去读写它,完全没问题。

语法极其严格

这是 XML 和 HTML 差别最大的地方之一。XML 不允许任何语法错误 —— 标签没闭合、大小写不一致、嵌套交叉了,解析器直接报错,不跟你商量。看起来很苛刻,但换个角度想,这也意味着数据格式不会模棱两可,出问题了一查就知道。

 

基本结构

看一个最简单的例子就能搞懂 XML 长什么样:

<root>
    <student id="101">
        <name>张三</name>
        <age>20</age>
    </student>
</root>

这里面只有三种东西:

  • 标签(Tag):<student>、<name>、<age>  这些用尖括号包起来的就是标签,用来圈定数据的边界。

  • 属性(Attribute):id="101"  这种写在标签里面的键值对,用来给标签附加额外信息。

  • 文本(Text):夹在标签中间的内容,比如 "张三"、"20",这才是真正要传递的数据。

还有一个概念叫根节点,就是最外面那层 <root>

注意:一份 XML 文件必须只有一个根节点,所有其他内容全得放在它里面。

  

语法规则速记

写 XML 的时候记住这几条就够了:

  1. 第一行写声明:<?xml version="1.0" encoding="UTF-8"?> 告诉解析器这是 XML 文件、用什么编码。

  2. 只能有一个根标签:所有内容都得包在这个唯一的根标签里。

  3. 标签必须成对:<name>张三</name>,有开头就必须有结尾。如果标签没有内容,可以简写成 <tag/>。

  4. 大小写是两回事:<User> 和 <user> 在 XML 眼里是完全不同的两个标签,写错了直接报错。

  5. 嵌套不能交叉:<a><b></a></b>这种写法不行,必须规规矩矩地 <a><b></b></a>。

  6. 属性值必须加引号:id="101"或 id='101'都行,但不能写成 id=101。

  

一个完整示例

把上面的规则串起来,写一个完整的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<user>
    <id>1001</id>
    <name>张三</name>
    <age>28</age>
    <address province="四川">成都</address>
</user>

详细说明:

  • 第一行是 XML 声明,告诉程序 "我是 XML,用 UTF-8 编码"。

  • <user>是根节点,下面挂着 id、name、age、address 四个子节点。

  • province="四川"是 address 标签的属性,用来补充说明这个地址属于哪个省。

  

XML 和 HTML

下表从四个维度对 XML 和 HTML 进行比较:

对比项XMLHTML
核心职责存储和传输数据展示网页内容
标签来源完全自定义固定的标签集(div、p、a...)
语法要求极其严格,错一点就报错比较宽松,浏览器会尽量容错
样式渲染不管,没这个概念负责布局、颜色、视觉效果

一句话总结:HTML 关心 "看起来怎么样",XML 关心 "数据是什么"。

  

实际用在哪些地方

XML 在真实项目中主要出现在这几个场景:

  • 项目配置文件:很多框架和软件用 XML 来写配置,比如 Java 的 Maven(pom.xml)、Android 的布局文件、.NET 的 web.config,打开一看全是 XML。

  • 跨系统数据交互:两个不同语言写的系统要传数据,XML 就是个通用中介。A 系统生成 XML,B 系统解析 XML,谁都不用管对方用什么技术栈。

  • 文档格式标准:早期的电子书(epub 里面就有 XML)、Office 文档(docx、xlsx 本质上是压缩包里面装 XML)、自定义报表,底层很多都是 XML。

  • 数据格式校验:可以配合 DTD 或 XML Schema 定义一套规则,规定哪些标签能出现、什么类型、什么顺序,不符合规则的数据直接拒绝。

  

配套的几个概念

XML 本身只负责写数据,真正干活的时候一般还会搭配下面这几样东西:

DTD / XML Schema

这两个东西的作用是一样的:给你的 XML 定规矩。比如规定 <user>下面必须有 <name>,<age>的值必须是数字,<address>可以有 province 属性等等。数据发过来,先用 Schema 校验一下合不合规,不合规的直接打回去。

XPath

一种路径表达式,用来在 XML 里面定位节点。你可以把它理解成 XML 的"文件路径" —— 比如 /user/address 就表示找到 user 下面的 address 节点。配合程序使用,可以精准地提取你需要的某一块数据。

XSLT

用来做格式转换的工具。它可以把 XML 转换成 HTML、纯文本,甚至另一种结构的 XML。比如你想把一份 XML 数据渲染成网页表格,写一个 XSLT 模板就能搞定。

更多 XML 相关知识将在单独的教程中详细介绍。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号