可扩展标记语言(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>
不同)。
注释:
<!-- 注释内容 -->
特殊字符转义:
< → <
> → >
& → &
" → "
' → '
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查询语言。