使用xml.dom.minidom.Node遍历XML文档
xml.dom.minidom 是 Python 中处理 XML 的标准库之一。它提供了一种在内存中加载和操作 XML 文档的简单方法。xml.dom.minidom.Node 是 xml.dom.minidom 中的一个类,用于表示 XML 文档中的节点。
遍历 XML 文档需要将 XML 文档加载到内存中,并使用 xml.dom.minidom.parseString() 或 xml.dom.minidom.parse() 方法将 XML 文档解析成一个 Document 对象。然后,使用 Document 对象的相关方法,例如 document.getElementsByTagName() 或 document.childNodes(),来获取需要遍历的节点列表。最后,使用 xml.dom.minidom.Node 类的方法对节点进行遍历和操作。
下面是一个使用 xml.dom.minidom.Node 遍历 XML 文档的示例:
from xml.dom import minidom
# 加载 XML 文档
xml_string = '''
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
'''
dom = minidom.parseString(xml_string)
root_node = dom.documentElement
# 遍历获取所有 book 节点
book_nodes = root_node.getElementsByTagName("book")
for book_node in book_nodes:
if book_node.nodeType == minidom.Node.ELEMENT_NODE:
# 获取 book 节点的属性
category = book_node.getAttribute("category")
print(f"Category: {category}")
# 获取 book 节点的子节点
child_nodes = book_node.childNodes
for child_node in child_nodes:
if child_node.nodeType == minidom.Node.ELEMENT_NODE:
# 获取子节点的标签名和文本内容
tag_name = child_node.tagName
text_content = child_node.firstChild.data
print(f"{tag_name}: {text_content}")
print("-" * 30)
以上示例中,首先使用 minidom.parseString() 方法将 XML 字符串解析为 Document 对象,然后通过 document.documentElement 获取根节点。接着使用 getElementsByTagName() 方法获取文档中所有的 book 节点,并遍历每个 book 节点。
对于每个 book 节点,可以使用 getAttribute() 方法获取其属性值。然后通过 childNodes 获取所有的子节点,并遍历每个子节点。对于每个子节点,可以使用 tagName 获取其标签名,使用 firstChild.data 获取其文本内容。
在上述示例中,我们遍历 bookstore 根节点下的所有 book 节点,获取了每个 book 节点的属性和子节点信息,并打印输出。最后我们在每个 book 节点的输出之间加了分隔线。
希望这个例子能帮助你理解如何通过 xml.dom.minidom.Node 类遍历 XML 文档。请注意,这只是一个基本的示例,xml.dom.minidom.Node 还有其他一些方法可用于查询和操作 XML 节点。根据需要,你可以进一步探索 xml.dom.minidom.Node 的文档和示例来学习更多用法。
