2.4 编码->W3C XML 1.0标准(W3C Recommendation):XML(Extensible Markup Language)

一、核心定义与定位

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言

核心特点是:

  • 可扩展 :你可以自定义标签(比如<book><user>),而非像 HTML 那样只能用预定义标签(<div><p>)。
  • 平台无关:跨语言、跨系统,是不同系统间数据交换的通用格式。
  • 易读易解析:人类可直接阅读,机器也能通过解析器轻松处理。

简单比喻:XML 就像 "数据的说明书",只描述数据是什么 (比如 "这是一本书的标题"),不描述数据怎么展示(这是 HTML 的职责)

二、XML 核心语法规则

XML 有严格的语法规范,违反则解析器会报错,核心规则如下:

基本结构(文档声明 + 根元素)

一个完整的 XML 文档必须包含:

  • 文档声明(可选但推荐):定义 XML 版本、编码等
  • 唯一的根元素:所有其他元素都嵌套在根元素内

示例(基础结构):

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>  <!-- 文档声明:版本1.0,编码UTF-8 -->
<library>                                <!-- 根元素:整个文档只有一个根 -->
    <book>                               <!-- 子元素 -->
        <title>Python编程:从入门到实践</title>
        <author>埃里克·马瑟斯</author>
        <price>89.00</price>
    </book>
</library>

核心语法规则(必须遵守)

规则 说明 错误示例 正确示例
标签必须闭合 所有标签要么成对(<a></a>),要么自闭合(<img /> <price>89.00 <price>89.00</price><br />
标签大小写敏感 <Book><book> 是不同标签 <Book><title>...</Book>(闭合用<book> <book><title>...</book>
元素必须正确嵌套 子元素必须完全包含在父元素内 <book><title>Python</book></title> <book><title>Python</title></book>
属性值必须加引号 属性(key="value")的值必须用单 / 双引号包裹 <book id=123> <book id="123"><book id='123'>
特殊字符转义 不能直接用 < > & " ',需转义 <price>89 & 99</price> <price>89 &amp; 99</price>

转义字符对照表:

原字符 转义字符 说明
< &lt; 小于号
> &gt; 大于号
& &amp; 和号
" &quot; 双引号
' ' 单引号

常见扩展语法

  • 注释 :格式为 <!-- 注释内容 -->,不会被解析器处理

    xml 复制代码
    <!-- 这是一本Python相关的书籍 -->
    <book id="123">
        <title>Python编程:从入门到实践</title>
    </book>
  • CDATA 段 :用于包裹无需转义的文本(比如代码、特殊字符),格式为 <![CDATA[ 内容 ]]>

    xml 复制代码
    <book>
        <description>
            <![CDATA[ 本书包含Python代码:print(10 > 5) & print("Hello") ]]>
        </description>
    </book>
  • 命名空间 :解决标签名冲突(比如两个<book>来自不同模块),用xmlns定义

    xml 复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <lib:library xmlns:lib="http://example.com/library"  <!-- 定义命名空间前缀lib -->
                 xmlns:store="http://example.com/store">
        <lib:book id="123">Python编程</lib:book>
        <store:book id="456">Java编程</store:book>
    </lib:library>

三、XML 解析(实战示例)

XML 的核心价值是 "传输 / 存储数据",实际开发中需要用代码解析 XML 提取数据,这里以 Python 为例(最常用的两种方式):

前置条件

确保安装了 Python 内置的解析库(无需额外安装):xml.etree.ElementTree(轻量)、xml.dom.minidom(DOM 方式)

示例:解析 XML 文件

假设有books.xml文件:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book id="1">
        <title>Python编程:从入门到实践</title>
        <author>埃里克·马瑟斯</author>
        <price>89.00</price>
    </book>
    <book id="2">
        <title>Java核心技术</title>
        <author>凯·霍斯特曼</author>
        <price>129.00</price>
    </book>
</library>

ElementTree解析的代码:

python 复制代码
import xml.etree.ElementTree as ET

# 1. 解析XML文件
tree = ET.parse("books.xml")
root = tree.getroot()  # 获取根元素<library>

# 2. 遍历所有<book>元素,提取数据
for book in root.findall("book"):
    book_id = book.get("id")  # 获取属性值
    title = book.find("title").text  # 获取子元素文本
    author = book.find("author").text
    price = book.find("price").text
    print(f"书籍ID:{book_id},标题:{title},作者:{author},价格:{price}")

# 输出结果:
# 书籍ID:1,标题:Python编程:从入门到实践,作者:埃里克·马瑟斯,价格:89.00
# 书籍ID:2,标题:Java核心技术,作者:凯·霍斯特曼,价格:129.00

四、XML 典型使用场景

  1. 数据交换 :不同系统(比如 Java 后端和 Python 后端)间传输数据(虽现在 JSON 更常用,但老系统仍大量使用)
  2. 配置文件 :很多框架 / 工具用 XML 做配置(比如 Spring、MyBatis、AndroidManifest.xml)
  3. 数据存储 :小型应用的结构化数据存储(比如电子书元数据、配置清单)
  4. 文档规范 :用于定义数据格式(比如 XML Schema、DTD),确保数据交换的一致性

五、XML vs JSON(核心对比)

维度 XML JSON
语法复杂度 复杂(标签嵌套、声明、转义) 简洁(键值对、数组)
可读性 偏繁琐,但结构清晰 更易读,适合人类快速理解
解析效率 较低(需解析标签) 较高(轻量,解析更快)
扩展性 强(命名空间、Schema) 弱(无原生扩展机制)
适用场景 老系统、配置文件、严格的文档规范 现代 API、前端后端数据交互

总结

  1. XML 是可扩展的标记语言 ,核心用于存储 / 传输结构化数据,语法严格(标签闭合、嵌套、转义是关键)
  2. XML 的核心优势是可扩展、跨平台,但语法繁琐,现在数据交互场景逐渐被 JSON 替代,主要用于老系统和配置文件
  3. 解析 XML 时需遵守语法规则,常用工具(如 Python 的 ElementTree)可快速提取标签、属性、文本数据
相关推荐
恋猫de小郭11 小时前
解析华为 DevEco Code 和小米 MiMo Code,都基于 OpenCode ,有什么区别?
android·前端·ios
IT_陈寒11 小时前
Vue的响应式让我原地裂开,你们也有这情况吗
前端·人工智能·后端
问心无愧051311 小时前
ctfshow web入门114
android·前端·笔记
晓得迷路了11 小时前
栗子前端技术周刊第 133 期 - Angular v22、React 编译器 Rust 版、pnpm 11.5...
前端·javascript·css
一个被程序员耽误的厨师11 小时前
02-架构篇-前端怎么反客为主把AI编排权拿回到自己手里
前端·人工智能·架构
羊羊小栈12 小时前
基于混合检索RAG的食品生产质量问答系统(BGE_BM25_大语言模型)
前端·人工智能·语言模型·自然语言处理·毕业设计·大作业
烤代码的吐司君12 小时前
Redis 服务配置与使用
前端·bootstrap·html
之歆12 小时前
Ajax 基础技术深度解析:XHR 从入门到跨域
前端·ajax·okhttp
怕浪猫12 小时前
Electron 开发实战(十四):实战项目|从零搭建轻量化桌面代码编辑器
前端·electron·node.js
放下华子我只抽RuiKe512 小时前
FastAPI 全栈后端(七):测试与自动化
运维·前端·人工智能·react.js·前端框架·自动化·fastapi