📅  最后修改于: 2023-12-03 15:07:54.973000             🧑  作者: Mango
XML(可扩展标记语言)是一种常用的数据交换格式,它被广泛应用于 Web 服务,SOAP,RESTful web services 等领域。在 Python 中,你可以使用 DOM API 解析 XML,获取 XML 的结构与内容,以方便的方式读取和处理 XML。
DOM(文档对象模型)是处理 XML 文档的 API,它提供了一种标准化的方式来处理 XML 数据。使用 DOM API 解析 XML 文档,我们可以访问 XML 文档中的节点,并获取其内容和属性。
在 Python 中,我们可以使用 xml.dom
模块来解析 XML,该模块提供了一个 minidom
子模块,该子模块实现了 DOM API。
要解析 XML,我们需要使用 xml.dom.minidom
模块中的 parse()
函数。该函数将 XML 文件路径作为参数,返回一个 Document
对象,该对象表示整个 XML 文档。
from xml.dom.minidom import parse
xml_path = '/path/to/xml/file.xml'
doc = parse(xml_path)
一旦我们有了 Document
对象,我们就可以访问节点了。我们可以使用 getElementsByTagName()
方法按标签名访问节点,或者使用 childNodes
或 firstChild
等属性来遍历节点。以下是一个示例程序:
from xml.dom.minidom import parse
xml_path = '/path/to/xml/file.xml'
doc = parse(xml_path)
# 获取所有的 <book> 节点
books = doc.getElementsByTagName('book')
# 遍历所有的 <book> 节点
for book in books:
# 获取 <title> 节点内容
title_node = book.getElementsByTagName('title')[0]
title = title_node.childNodes[0].data
print('Title: {}'.format(title))
# 获取 <author> 节点内容
author_node = book.getElementsByTagName('author')[0]
author = author_node.childNodes[0].data
print('Author: {}'.format(author))
# 获取 <price> 节点内容
price_node = book.getElementsByTagName('price')[0]
price = price_node.childNodes[0].data
print('Price: {}'.format(price))
DOM API 还提供了一种方便的方式来修改 XML 文档。我们可以使用 createElement()
方法创建新的节点,使用 setAttribute()
方法设置节点属性,并使用 appendChild()
或 insertBefore()
或 replaceChild()
方法插入、移动或替换节点。以下是一个示例程序:
from xml.dom.minidom import parse
xml_path = '/path/to/xml/file.xml'
doc = parse(xml_path)
# 添加一个新的 <book> 节点
new_book_node = doc.createElement('book')
# 添加 <title> 节点
new_title_node = doc.createElement('title')
new_title_text_node = doc.createTextNode('New Book Title')
new_title_node.appendChild(new_title_text_node)
new_book_node.appendChild(new_title_node)
# 添加 <author> 节点
new_author_node = doc.createElement('author')
new_author_text_node = doc.createTextNode('New Book Author')
new_author_node.appendChild(new_author_text_node)
new_book_node.appendChild(new_author_node)
# 添加 <price> 节点
new_price_node = doc.createElement('price')
new_price_text_node = doc.createTextNode('99.99')
new_price_node.appendChild(new_price_text_node)
new_book_node.appendChild(new_price_node)
# 插入新节点
doc.documentElement.appendChild(new_book_node)
# 保存文件
with open(xml_path, 'w') as f:
doc.writexml(f)
DOM API 提供了一种方便的方式来解析和修改 XML 文档。使用 Python 的 xml.dom.minidom
模块,我们可以在 Python 中解析和处理 XML 数据,这对于开发 Web 服务、SOAP、RESTful web services 等应用非常有用。