📜  在Python中使用 DOM API 解析 XML(1)

📅  最后修改于: 2023-12-03 15:07:54.973000             🧑  作者: Mango

在Python中使用 DOM API 解析 XML

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,我们需要使用 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() 方法按标签名访问节点,或者使用 childNodesfirstChild 等属性来遍历节点。以下是一个示例程序:

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))
修改 XML

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 等应用非常有用。