XML语言解析

1. 什么是 XML?

XML 的全称是 eXtensible Markup Language,即可扩展标记语言。

它是一种用于存储和传输数据的标记语言。其核心特点是:

  • 可扩展:它没有预定义的标签,允许用户根据自己的需求定义自己的标签。
  • 自描述性:数据的结构和含义通过标签本身来表达,使得人和机器都能比较容易地理解数据的含义。
  • 平台和语言无关:XML 是纯文本文件,任何能够处理文本的系统都可以读写 XML。

XML 是一种 "元语言",即用于定义其他语言的语言。基于 XML 定义的语言例子包括:RSS, Atom, SOAP, SVG, XHTML 等。

2. 核心特点

  1. 结构与内容分离:XML 将数据的结构和数据内容本身分离开,使得数据可以独立于显示和处理逻辑。
  2. 严格的格式要求 :XML 语法非常严格,必须是格式良好 的,否则解析器会报错。
  3. 纯文本格式:易于阅读、调试和跨平台交换。
  4. 强大的可扩展性:通过 DTD 或 XML Schema 可以严格定义文档的结构,为数据验证提供了基础。

3. 基本语法规则

一个最简单的 XML 文档如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Alice</to>
  <from>Bob</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting today!</body>
</note>
  • XML 声明<?xml ... ?> 定义了 XML 的版本和字符编码。

  • 根元素<note> 是文档的根元素,有且只有一个。

  • 元素 :由开始标签(如 <to>)、内容和结束标签(如 </to>)组成。元素可以嵌套。

  • 空元素 :可以写成 <element></element> 或简写为 <element />

  • 属性 :元素可以包含属性,用于描述元素的额外信息。

    xml 复制代码
    <book id="123" category="fiction">
        <title>XML Guide</title>
    </book>
  • 大小写敏感<Note><note> 是不同的标签。

  • 必须有关闭标签

  • 属性值必须用引号包围

  • 标签必须正确嵌套<b><i>Text</i></b> 是正确的,而 <b><i>Text</b></i> 是错误的。

4. 验证机制:DTD 与 XML Schema

为了确保 XML 文档不仅格式良好,而且结构符合预期,XML 提供了两种主要的验证机制。

a. DTD

DTD 是文档类型定义。它是一种较老但简单的方法,用于定义 XML 文档的合法构建模块。

xml 复制代码
<!DOCTYPE note [
  <!ELEMENT note (to, from, heading, body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
]>
  • 优点:语法简单。
  • 缺点:不支持数据类型(所有内容都是文本),功能有限,语法非 XML 格式。
b. XML Schema

XSD 是 XML Schema Definition。它是一种更强大、更现代的方法,本身也是 XML 文档。

xml 复制代码
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string"/>
        <xs:element name="from" type="xs:string"/>
        <xs:element name="heading" type="xs:string"/>
        <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
  • 优点
    • 支持丰富的数据类型(字符串、整数、日期等)。
    • 使用 XML 语法,易于用 XML 工具处理。
    • 功能强大,支持命名空间、继承等。
  • 缺点:比 DTD 复杂。

5. 相关技术栈

XML 不仅仅是一种语言,它还是一个庞大的技术家族的核心:

  • XPath:一种在 XML 文档中导航和查询节点的语言。
  • XSLT:一种用于将 XML 文档转换为其他格式(如 HTML、PDF 或另一个 XML)的语言。
  • XQuery:类似于 SQL,用于查询 XML 数据集合。
  • DOM:文档对象模型,将整个 XML 文档作为一棵树结构加载到内存中,允许程序动态访问和操作。
  • SAX:一种基于事件的解析模型,顺序读取文档,在读取过程中触发事件,内存占用小,适合处理大文件。

6. 应用场景

尽管 JSON 在现代 Web API 中更为流行,XML 仍在许多重要领域占据主导地位:

  1. 配置文件

    • 许多软件和框架使用 XML 作为配置文件。例如:Java 的 Ant, Maven;Android 的布局文件;Spring 框架的早期配置;.NET 的 Web.configApp.config
  2. Web Services

    • SOAP 是一种基于 XML 的协议,用于构建 Web 服务。它依赖 XML 来定义消息格式和进行远程过程调用。
  3. 文档格式

    • Microsoft Office :从 Office 2007 开始,.docx, .xlsx, .pptx 等格式本质上是压缩包,里面包含了一系列描述文档内容、样式、元数据的 XML 文件。
    • OpenDocument Format:LibreOffice 和 Apache OpenOffice 使用的开源文档标准,也基于 XML。
  4. 数据交换与集成

    • 在企业级应用集成中,不同系统之间经常使用 XML 作为标准的中间格式来交换数据,尤其是在 B2B 场景中。
  5. 标记语言的基础

    • XHTML:是更严格、更纯净的 HTML,基于 XML。
    • SVG:可缩放矢量图形,使用 XML 来描述二维图形。
    • RSS/Atom:用于新闻摘要和博客订阅的格式。

7. 优缺点

优点

  • 可读性强:标签具有自解释性,人类和机器都易于理解。
  • 平台和语言无关:是数据交换的理想中立格式。
  • 严格的结构和验证:通过 Schema 可以确保数据的完整性和正确性。
  • 强大的生态系统:拥有成熟且丰富的工具链(解析器、转换器、验证器等)。

缺点

  • 冗长:与 JSON、YAML 或二进制格式相比,XML 非常冗长,标签重复导致文件体积大,传输效率较低。
  • 解析开销大:解析复杂的 XML 文档需要较多的计算和内存资源。
  • 语法相对繁琐:与 JSON 的轻量级语法相比,XML 的开闭标签和属性规则显得有些笨重。
  • "XML Hell":在 SOAP 等复杂应用中,XML 消息可能变得极其复杂和难以维护。

8. 与 JSON 的对比

特性 XML JSON
全称 eXtensible Markup Language JavaScript Object Notation
格式 标记语言 轻量级数据交换格式
数据模型 树形结构,元素和属性 键值对、数组、简单值
可读性 好(但较冗长) 好(更简洁)
命名空间 支持 不支持
Schema/验证 强大(DTD, XSD) 有(JSON Schema),但不如 XSD 强大
解析 DOM/SAX(相对复杂) 直接解析为 JavaScript 对象(在 Web 中天然优势)
典型应用 企业级配置、文档格式、SOAP 现代 Web API、NoSQL 数据库、配置文件

总结

XML 是一种强大、灵活且自描述的数据格式 ,它通过严格的语法和强大的验证机制,在企业级应用、文档存储和复杂数据交换领域确立了稳固的地位。虽然在新兴的 Web 和移动应用开发中,JSON 因其轻量和与 JavaScript 的天生亲和力而更受欢迎,但 XML 在其优势领域(如需要复杂验证和丰富元数据的场景)仍然是不可或缺的工具。理解 XML 是理解现代计算中数据表示和交换的基础之一。

相关推荐
未来之窗软件服务1 天前
万象EXCEL开发(五)模拟excel行计算 ——东方仙盟练气期
xml·仙盟创梦ide·东方仙盟·万象excel
sun0077001 天前
网络配置config.xml的android.mk解析
android·xml
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 天前
mapper.xml中limit分页参数不能使用计算表达式问题
xml
余防2 天前
XXE - 实体注入(xml外部实体注入)
xml·前端·安全·web安全·html
未来之窗软件服务2 天前
万象EXCEL开发(四)格式解读theme1.xml ——东方仙盟练气期
xml·仙盟创梦ide·东方仙盟·万象excel
未来之窗软件服务3 天前
万象EXCEL开发(二)格式解读sharedStrings.xml——东方仙盟练气期
xml·excel·仙盟创梦ide·东方仙盟·万象excel·东方仙盟格式
goTsHgo4 天前
Spring XML 配置简介
xml·java·spring
半导体守望者4 天前
TR帝尔编码器GSD文件 PROFIBUS XML PROFINET EtherCAT 文件 ADH CDH CMV等
xml·经验分享·笔记·机器人·自动化·制造
极光雨雨4 天前
XML中的 CDATA mybaitis xml中的 <![CDATA[ xxxx ]]>
xml