可扩展标记语言(eXtensible Markup Language),用于存储和传输结构化数据。

特点

  • 标签可自定义(与HTML固定标签不同)

  • 严格区分大小写

  • 是纯文本格式,独立于平台和语言

应用场景

配置文件(如Spring)、Web服务(SOAP)、数据交换(如RSS)、文档格式(如Office Open XML)等。

XML语法规则

  • ​必须满足“格式良好”(Well-Formed)​​:

    • 必须有且仅有一个根元素。

    • 所有标签必须闭合(如 <tag></tag> 或自闭合 <tag/>)。

    • 属性值必须用引号包裹(如 id="1")。

    • 标签嵌套顺序正确,不能交叉(如 <a><b></a></b> 错误)。

    • 区分大小写(如 <Note><note> 不同)。

  • ​注释​​:<!-- 注释内容 -->

  • ​特殊字符转义​​:

    • < → &lt;

    • > → &gt;

    • & → &amp;

    • " → &quot;

    • ' → &apos;

  • ​CDATA区​​:包裹无需转义的内容,如代码片段。

<![CDATA[ if(a < b && c > d) { ... } ]]>

XML验证

DTD

定义元素和属性的结构,比如:

<!DOCTYPE note [
  <!ELEMENT note (to, from, body)>
  <!ELEMENT to (#PCDATA)>
]>

​缺点是不支持数据类型,语法较古老。

XML Schema

使用XML语法,支持命名空间数据类型(如字符串、整数)。

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

命名空间

避免元素名冲突,通过URI唯一标识。

<root xmlns:app="http://example.com/app">
  <app:user>John</app:user>
</root>

XML解析方式

DOM

  • 将整个XML加载到内存形成树结构。

  • ​优点​​:可随机访问、修改。

  • ​缺点​​:内存消耗大,不适合大文件。

SAX

  • 基于事件驱动的流式解析。

  • ​优点​​:内存效率高,适合大文件。

  • ​缺点​​:无法随机访问,只能读一次。

XML相关技术​

  • ​XPath​​:用于在XML中定位节点,语法如 /bookstore/book[1]/title

  • ​XSLT​​:将XML转换为其他格式(如HTML),基于模板匹配。

  • ​XQuery​​:类似SQL的XML查询语言。