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

📅  最后修改于: 2023-12-03 14:51:19.384000             🧑  作者: Mango

在Python中使用 Minidom 解析 XML

简介

XML是一种用于存储和传输数据的标记语言。在Web应用程序开发中,XML被广泛使用。Python提供了许多可以用于解析XML的库。

其中一个库是Minidom。Minidom是Python标准库中的一个XML解析器。它允许用户以一个树状结构来解析XML,并能够轻松地在其中查找、修改或删除数据。

Minidom安装

在使用Minidom之前,需要确保它已经安装。Minidom是Python标准库的一部分,因此不需要单独安装。您只需要在代码中导入 xml.dom.minidom 包即可使用。

XML解析

XML文档可以被解析成一个DOM树。DOM树是一种以树形结构来表示文档内容的数据结构。您可以使用Minidom库来解析XML文档并将其转换为DOM树。

在下面的示例中,我们将读取一个名为'example.xml'的XML文件,并将其转换为DOM树:

from xml.dom import minidom

# parsing the XML file
doc = minidom.parse('example.xml')

# getting the root element
root = doc.documentElement

在上面的代码中,我们导入了Minidom库,并使用parse()方法读取了'example.xml'文件。然后我们使用documentElement属性从DOM树中获取根元素。

获取元素

在DOM树中,元素是指XML文档中的标记。通过在DOM树中查找标记,可以获取元素的值以及元素的属性。例如,在下面的示例中,我们将获取XML文档的第一个“person”元素:

# getting the first 'person' element
persons = root.getElementsByTagName("person")
person = persons[0]

在上面的代码中,我们使用getElementsByTagName方法从DOM树中查找所有名称为“person”的元素。然后从结果中获取第一个元素。

获取元素的值

DOM树中的元素在表示文本时,通常使用一个文本节点。要获取元素的值,您需要使用一个名为“firstChild”的属性和一个名为“data”的属性。例如,在下面的示例中,我们将获取名为“name”的元素的值:

# getting the 'name' element value
name = person.getElementsByTagName("name")[0]
print(name.firstChild.data)

在上面的代码中,我们使用getElementsByTagName方法从名为“person”的元素中获取所有名为“name”的元素。然后我们从结果中获取第一个元素,并从其中的文本节点获取值。

获取元素的属性

如果您想要获取元素的属性,可以使用元素对象上的一个名为“getAttribute”的方法。例如,在下面的示例中,我们将获取名为“person”的元素的名为“id”的属性:

# getting the 'id' attribute of the 'person' element
person_id = person.getAttribute("id")
print(person_id)

在上面的代码中,我们使用getAttribute方法从“person”元素中获取名为“id”的属性。

使用 Minidom 创建 XML

除了解析现有XML文档之外,您还可以使用Minidom来创建新的XML文档。在下面的示例中,我们将创建一个名为“example.xml”的新文档,并在其中添加一些元素:

from xml.dom import minidom

# creating an empty XML document
doc = minidom.Document()

# creating a root element
root = doc.createElement("persons")
doc.appendChild(root)

# adding elements to the root element
person = doc.createElement("person")
person.setAttribute("id", "001")
root.appendChild(person)

name = doc.createElement("name")
name.appendChild(doc.createTextNode("John"))
person.appendChild(name)

age = doc.createElement("age")
age.appendChild(doc.createTextNode("30"))
person.appendChild(age)

# saving the changes to a file
xml_str = doc.toprettyxml(indent="  ")
with open("example.xml", "w") as f:
    f.write(xml_str)

在上面的代码中,我们创建了一个空XML文档,并添加了一个名为“persons”的根元素。然后,我们使用createElement方法创建一个名为“person”的新元素,并使用setAttribute方法设置其ID属性。接下来,我们使用createElementcreateTextNode方法创建一个名为“name”的新元素和一个文本节点,并将它们添加到“person”元素中。最后,我们将新文档以美化的形式保存到名为“example.xml”的文件中。

结论

使用Minidom解析和创建XML文档是Python中非常流行的一种方式。它经常用于Web应用程序开发中,因为XML被广泛用于存储和传输数据。Minidom库相对容易学习和使用,因此是Python初学者使用的最受欢迎的XML解析器之一。