💻 第十一章 XML究竟是什么
📄 一句话概括

光看 1000 谁也不知道它是什么——包上标签变成 <价格 币种="人民币">1000</价格>,机器算得准、人读得懂,这就是给信息赋予意义。

📝 本节和前面几节的关系

上一节说 XML 只管语法不管含义,本节看使用者怎么用【起名字】把含义补回来——这是 XML 表达力的来源。

一、裸数据的问题

表里一行 1000:是价格、库存还是编号?脱离上下文的数字没有含义; 传统做法靠约定:第 3 列是价格——约定没写进数据里,换个系统、换个人就对不上; XML 的做法是把含义写进数据本身:标签名就是含义。

二、标签名与属性一起赋义

<价格 币种="人民币">1000</价格>:标签名说明【这是什么】,属性说明【补充条件】(单位、版本、类型); 这种【数据自带说明】的性质叫自描述——文件换到任何系统,含义不丢; 名字起得好不好直接决定可读性:<p> 要猜,<price> 一看就懂——这也是行业标准里标签名总写得很长的原因。

三、人读名字、机器读数

分工很清晰:机器负责算值(1000),人负责看名字(价格); XML 把两者缝在同一个文档里——程序员、业务人员、审计人员读同一份文件都不会误解; 这份【机器友好+人类可读】的双重属性,正是它比二进制格式更适合做交换的原因(下一节)。

四、动手 Demo:裸数据与带标签数据的对照

把同一个 1000 分别以裸值和带标签的形式呈现,看解析器能从中读出多少信息。

import xml.etree.ElementTree as ET
raw = "1000"
e = ET.fromstring('<价格 币种="人民币">1000</价格>')
print("裸数据:", raw, "-> 只能靠约定猜")
print("标签名:", e.tag)
print("属性:", dict(e.attrib))
print("值:", e.text)

实跑输出:

--------------------------------------------------------------------
XML 可以为信息赋予意义
--------------------------------------------------------------------

看这行数据: 1000
    它是什么? 价格? 库存? 编号? —— 光看数字, 谁也答不上来。

包上标签就有了意义:

    <价格 币种="人民币">1000</价格>   <- 一看就懂

    裸数据: 1000        只能靠约定猜测
    带标签: <价格>1000</价格>  标签即含义, 属性 {'币种': '人民币'} 补充说明

    属性(attribute)也是来源: 币种=人民币 让 1000 有了单位, 不再含糊。

【⚠️ 2026 现状】机器擅长算数字, 人擅长读标签——XML 把【给人看的名字】和
【给机器算的值】缝在一起, 这是它能做数据交换底层的根本原因(下一节)。

同一串数字, 解析器从带标签版本里拿到了 名字+单位+值 三样信息。 属性特别适合表达【附带条件】——币种、单位、版本号这类用一次就够的说明。

30 秒实验

  1. 把一行 CSV 数据(张三,92,2026-10-14)改写成带标签的 XML,尽量把含义写足。
  2. 比较两种写法:<价格>1000</价格> 与 <价格 币种="人民币">1000</价格>,说说第二种多出来的信息值不值得。

常见误区

  1. 以为标签名随便起就行——名字即含义,起得含糊等于没赋义。
  2. 以为属性与子元素可以随便换着用——一个元素的信息用属性还是子元素,行业惯例各有讲究。
自测三问(点开对答案) 1. XML 怎么给信息赋予意义? —— 把含义写进标签名与属性——数据自带说明(自描述)。 2. 标签名与属性各管什么? —— 标签名答【这是什么】,属性答【补充条件】。 3. 人机分工是怎样的? —— 人读名字确认含义,机器读值参与计算。

相关笔记