> 技术文档 > XML基础

XML基础


文章目录

  • 一、XML是什么
  • 二、XML的组成部分
  • 三、XML的作用
  • 四、XML语法规则
  • 五、DTD
    • 1.内部引用
    • 2.外部引用
  • 六、DTD实体
    • 1.内部实体
    • 2.外部实体w

一、XML是什么

XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言,于1998年由W3C(万维网联盟)推出。它不预设标签,允许用户根据需求自定义标记,因此具有极强的可扩展性。

与HTML(超文本标记语言)不同,XML的核心作用是描述数据的结构和含义,而非定义数据的显示方式。例如,一份XML文件可以清晰记录订单信息的层级关系(如订单号、客户信息、商品列表等),且这些数据能被不同系统统一解析。

二、XML的组成部分

XML文件的基本组成包括以下元素

  • 声明:位于文件开头,用于指定XML版本和编码格式,例如
  • 元素:由开始标签、内容和结束标签组成,是XML的基本单位,例如 XML教程。元素可嵌套,形成层级结构。
  • 属性:用于为元素提供额外信息,位于开始标签中,格式为 属性名=\"属性值\",例如 XML教程
  • 实体:用于表示特殊字符或重复内容的引用,例如 & 代表 &(与号)。
  • 注释:以 <!-- 开头、--> 结尾,用于解释代码,不影响XML的解析,例如

三、XML的作用

  • 数据存储:XML采用结构化格式,适合存储配置文件(如软件的配置参数)、数据记录(如日志、订单)等,便于人类阅读和机器解析。
  • 数据传输:在不同系统(如客户端与服务器、不同编程语言的应用)之间传输数据时,XML作为通用格式可避免因数据格式不兼容导致的问题。
  • 数据交换:在跨平台、跨系统的场景中(如电子商务平台与支付系统对接),XML可作为标准化的数据交换格式,确保信息准确传递。
  • 配置文件:许多软件(如Java Web框架、数据库)使用XML作为配置文件,通过标签层级清晰定义系统参数。

四、XML语法规则

XML有严格的语法规范,违反规则会导致解析错误,核心规则包括:

  1. 必须有声明:文件开头需包含XML版本声明(如 ),编码格式可选。
  2. 单一根元素:整个XML文件必须有且仅有一个根元素,所有其他元素都嵌套在根元素内。例如:
    <library>  <book>XML教程</book></library>
  3. 标签成对闭合:所有元素必须有开始标签和结束标签,空元素可简写为 (如 )。
  4. 标签区分大小写 被视为不同标签。
  5. 属性值加引号:属性值必须用单引号或双引号包裹,例如
  6. 特殊字符用实体<>& 等特殊字符需用实体引用(如 < 代表 <),避免被解析为标签。

五、DTD

DTD(Document Type Definition,文档类型定义)是XML的一种约束机制,用于定义XML文档的结构(如允许的元素、属性、嵌套关系等),确保XML文件符合预设的格式规范。

1.内部引用

内部DTD直接定义在XML文件内部,仅对当前文件生效。

  • 格式:
    在XML声明之后、根元素之前,用 定义。

  • 示例:

    <!DOCTYPE library [ <!ELEMENT library (book+)>  <!ELEMENT book (title, author)>  <!ELEMENT title (#PCDATA)>  <!ELEMENT author (#PCDATA)> ]><library> <book> <title>XML教程</title> <author>张三</author> </book></library>

2.外部引用

外部DTD定义在独立的文件中(通常以 .dtd 为扩展名),可被多个XML文件共享引用。

  • 格式:
    引用本地外部DTD:
    引用公共外部DTD(由权威机构定义):

  • 示例:
    假设存在 library.dtd 文件,内容为:

    则XML文件可引用该外部DTD:

    <!DOCTYPE library SYSTEM \"library.dtd\"> <library> <book> <title>XML教程</title> <author>张三</author> </book></library>

六、DTD实体

实体是DTD中用于定义可重复使用的内容或引用外部资源的机制,类似“变量”,使用时通过 &实体名; 引用。

1.内部实体

内部实体在DTD中直接定义内容,仅在当前DTD范围内有效。

  • 格式:

  • 示例:

    <!DOCTYPE user [ <!ENTITY username \"Alice\">  <!ELEMENT user (name)> <!ELEMENT name (#PCDATA)>]><user> <name>&username;</name> <!-- 引用实体,解析后为Alice --></user>

2.外部实体w

外部实体引用外部文件的内容,可分为本地外部实体(引用本地文件)和远程外部实体(引用网络资源)。

  • 格式:
    本地外部实体:
    远程外部实体:

  • 示例:

    1. 引用本地文件(如 data.txt 内容为“Hello XML”):

      <!DOCTYPE note [   <!ELEMENT note (#PCDATA)>]><note>&content;</note> <!-- 解析后为Hello XML -->
    2. 引用远程资源(如 http://example.com/info.txt 内容为“远程数据”):

      <!DOCTYPE info [   <!ELEMENT info (#PCDATA)>]><info>&remote;</info> <!-- 解析后为远程数据 -->

    注意:外部实体可能存在安全风险(如XXE漏洞),攻击者可通过构造恶意外部实体读取服务器敏感文件,因此实际应用中需谨慎配置XML解析器,限制外部实体的使用。