欢迎访问宙启技术站
智能推送

Python中使用xml.dom解析XML文档的方法

发布时间:2023-12-16 04:50:30

在Python中,可以使用xml.dom包来解析XML文档。xml.dom包提供了一种DOM(文档对象模型)方式来操作XML文档。DOM方式将XML文档加载到内存中,并将其表示为一个树形结构,可以通过对树的遍历来获取和修改XML文档中的元素和属性。

下面是一个使用xml.dom解析XML文档的例子:

首先,需要导入xml.dom包中的相关模块:

from xml.dom import minidom

然后,使用minidom.parse()方法来解析XML文件,并返回一个Document对象:

dom = minidom.parse('example.xml')

接下来,可以使用Document对象的相关方法和属性来操作XML文档。

1. 获取节点

可以使用Document对象的getElementsByTagName()方法来获取指定名称的元素节点。例如,获取所有的"<book>"节点:

book_elements = dom.getElementsByTagName('book')

2. 获取元素内容

可以使用Element对象的childNodes属性来获取元素节点的所有子节点。例如,获取 个"<book>"节点的所有子节点:

book_element = book_elements[0]
child_nodes = book_element.childNodes

然后,遍历子节点列表来获取元素节点的文本内容。通常,文本内容保存在一个只包含文本节点的列表中,所以需要先使用nodeValue属性获取文本节点的值。例如,获取 个"<book>"节点的标题:

title_element = child_nodes[1]
title_text = title_element.childNodes[0].nodeValue

3. 获取属性值

可以使用Element对象的getAttribute()方法来获取指定名称的属性值。例如,获取 个"<book>"节点的id属性值:

id_value = book_element.getAttribute('id')

4. 修改元素内容和属性值

可以使用Element对象的appendChild()方法来添加新的子节点。例如,添加一个新的"<title>"子节点:

new_title_element = dom.createElement('title')
new_title_text = dom.createTextNode('New Title')
new_title_element.appendChild(new_title_text)
book_element.appendChild(new_title_element)

可以使用Element对象的setAttribute()方法来修改属性值。例如,将 个"<book>"节点的id属性值修改为'newid':

book_element.setAttribute('id', 'newid')

5. 保存修改后的XML文档

可以使用Document对象的toprettyxml()方法将修改后的XML文档转换为字符串,并保存到文件中。例如,保存修改后的XML文档到'output.xml'文件:

xml_str = dom.toprettyxml(indent='  ')
with open('output.xml', 'w') as f:
    f.write(xml_str)

完整的使用xml.dom解析XML文档的示例代码如下:

from xml.dom import minidom

# 解析XML文件
dom = minidom.parse('example.xml')

# 获取所有的"<book>"节点
book_elements = dom.getElementsByTagName('book')

# 获取      个"<book>"节点的所有子节点
book_element = book_elements[0]
child_nodes = book_element.childNodes

# 获取      个"<book>"节点的标题
title_element = child_nodes[1]
title_text = title_element.childNodes[0].nodeValue
print('Title:', title_text)

# 获取      个"<book>"节点的id属性值
id_value = book_element.getAttribute('id')
print('ID:', id_value)

# 添加新的"<title>"子节点
new_title_element = dom.createElement('title')
new_title_text = dom.createTextNode('New Title')
new_title_element.appendChild(new_title_text)
book_element.appendChild(new_title_element)

# 将      个"<book>"节点的id属性值修改为'newid'
book_element.setAttribute('id', 'newid')

# 保存修改后的XML文档到'output.xml'文件
xml_str = dom.toprettyxml(indent='  ')
with open('output.xml', 'w') as f:
    f.write(xml_str)

这是一个简单的示例,介绍了如何使用xml.dom解析和操作XML文档。通过了解xml.dom包的方法和属性,可以根据实际需求对XML文档进行更复杂的操作和处理。