XML即可扩展标记语言,它允许用户自定义标签来描述数据,凭借良好的可读性和跨平台特性,在多个技术领域都有重要作用。

XML的核心应用场景
1. 结构化数据存储
XML可以清晰地描述数据的层级结构,适合存储有嵌套关系的数据。比如存储图书信息,每一本书包含书名、作者、价格等字段,用XML存储可以直观体现这些关系。
下面是一个存储图书信息的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="编程">
<title>XML入门教程</title>
<author>张三</author>
<price>59.9</price>
</book>
<book category="文学">
<title>散文精选</title>
<author>李四</author>
<price>39.9</price>
</book>
</bookstore>
2. 跨系统数据交换
不同系统可能使用不同的编程语言和数据库,XML作为通用的数据格式,可以让这些系统之间顺利传递数据。比如两个企业的业务系统对接时,就可以用XML封装订单、用户等数据,接收方解析XML就能获取完整信息。
以下是一个订单数据交换的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<order>
<order_id>20240501001</order_id>
<user_id>1001</user_id>
<product_list>
<product>
<product_id>P001</product_id>
<product_name>无线鼠标</product_name>
<quantity>2</quantity>
</product>
</product_list>
<total_price>199.8</total_price>
</order>
3. 程序配置文件
很多软件和程序会用XML作为配置文件,因为XML的结构清晰,修改配置时不需要改动程序代码本身。比如Java的Web项目常用web.xml配置Servlet、过滤器等信息,Spring框架早期也常用XML配置Bean。
以下是一个简单的web.xml配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
4. 文档格式定义
XML可以用来定义其他文档的格式,比如XHTML就是基于XML的HTML规范,还有RSS订阅格式、SVG矢量图格式都是基于XML实现的。这些格式借助XML的规范,保证了文档的结构统一性和解析便利性。
XML的解析方式
要使用XML存储的数据,就需要解析XML,常见的解析方式有DOM解析和SAX解析:
- DOM解析:将整个XML文档加载到内存中,形成树形结构,方便随机访问节点,但占用内存较多,适合小文档。
- SAX解析:逐行读取XML文档,触发对应事件处理,占用内存少,适合大文档,但只能顺序访问,不能回头修改。
以下是用Python的xml.dom.minidom模块解析上述图书XML的示例:
import xml.dom.minidom
# 加载XML文档
doc = xml.dom.minidom.parse("books.xml")
# 获取所有book节点
books = doc.getElementsByTagName("book")
for book in books:
# 获取书名
title = book.getElementsByTagName("title")[0].firstChild.data
# 获取作者
author = book.getElementsByTagName("author")[0].firstChild.data
# 获取价格
price = book.getElementsByTagName("price")[0].firstChild.data
print(f"书名:{title},作者:{author},价格:{price}")
XML的优缺点
XML的优势在于可读性强、跨平台、可扩展,适合描述复杂结构的数据;缺点是冗余信息多,文件体积比JSON大,解析速度也相对较慢。因此在移动端、对性能要求高的场景中,JSON会更常用,但XML在对格式规范要求高的场景仍有不可替代的作用。