📄 一句话概括
XML 用一对对标签把数据围起来——开始标签、内容、结束标签合成一个元素,这就是【标记语言】的看家本领。
📝 本节和前面几节的关系
上一章加密保护了数据,本章换个话题:数据怎么【写清楚】——用标记把自己说明白。第一节先认识 XML 的基本零件。
一、标记语言是什么
标记=贴在内容两头的标签:<书名>计算机是怎样跑起来的</书名>——开头结尾各一个,把内容夹在中间;
开始标签、内容、结束标签合起来叫一个元素:<价格>59</价格> 整体就是一个价格元素;
元素里还能带属性补说明:<价格 币种="人民币">59</价格>——标签是骨架,属性是附注;
【标记语言】这个词不是 XML 发明的——排版时代的编辑在稿子上做标记,就是这个意思。
二、XML 的四条基本规矩
标签必须成对闭合:<a>...</a>,写不出结束标签就用自闭合 <a/>;
大小写敏感:<Book> 与 <book> 是不同的标签;
必须有且只有一个根元素,所有其他元素都套在它里面;
属性值必须加引号——四条全满足叫格式良好(Well-formed),解析器才肯收下。
三、和 HTML 是亲戚
两者都是标记语言、长得也像——区别在标签的来源:HTML 的标签是标准规定的,XML 的标签你自己定; HTML 讲究【显示出来好看】,XML 讲究【把含义说清楚】; 还有一条实际差别:HTML 宽松(漏个闭合标签浏览器也忍),XML 一条不合格就不收——严格是它做数据交换的本钱。
四、动手 Demo:最短的 XML 与它的零件
用一段三行就能读完的 XML,看清开始标签、结束标签、元素三者的关系,再由解析器读回来。
import xml.etree.ElementTree as ET
xml = '<book><title>计算机是怎样跑起来的</title><price>59</price></book>'
root = ET.fromstring(xml)
print("根元素:", root.tag)
for child in root:
print(child.tag, child.text)
实跑输出:
--------------------------------------------------------------------
XML 是标记语言
--------------------------------------------------------------------
先看一段最短的 XML——给数据两头【贴上标签】:
<book><title>计算机是怎样跑起来的</title><price>59</price></book>
<书名>...</书名> 这种成对的标签(标记)把内容围起来, 这就是标记语言。
解析出来看:
根元素: book
子元素: title 文本: 计算机是怎样跑起来的
子元素: price 文本: 59
成分 本例 作用
-------------------------------------------------------------------
开始标签 <price> 标志内容从此开始
结束标签 </price> 标志内容到此结束
元素 整个 <price>59</price> 标签 + 内容 = 一个信息单元
和 HTML 是亲戚, 都是标记语言; 区别在标签是谁定的——下一节说。
解析器把标签还原成【元素对象树】:root 是根,title 与 price 是子元素,文本挂在各自的 .text 上。 试试把 删掉再解析——解析器立刻报错:这就是【必须成对闭合】的分量。
30 秒实验
- 写一段含三个元素的 XML(如一本书的书名、作者、价格),跑一遍解析,看元素树的结构。
- 故意写一个没有根元素的 XML(并列两个顶级元素),观察解析器怎么拒绝。
常见误区
- 以为标签像 HTML 一样可以只写开头——XML 必须成对(或自闭合),否则不是格式良好的文档。
- 以为标签大小写随意——
<Book>与<book>是两个不同的元素。
自测三问(点开对答案)
1. 一个元素由哪几部分组成? —— 开始标签+内容+结束标签;属性是附加说明。 2. 【格式良好】的硬条件有哪些? —— 标签成对闭合、大小写一致、唯一根元素、属性带引号。 3. XML 与 HTML 最本质的区别? —— 标签来源——HTML 预定义,XML 由使用者自己定义。- ☐ 下一节(11.2 XML 是可扩展的语言)
相关笔记
- 软件是指令和数据的集合 — 数据是什么,第一站从这里讲起
- 🕸️ Web技术原理 · 索引 — HTML 那一侧的标记语言在 21 课
- 💻 计算机是怎样跑起来的 · 索引