Python XML 解析


Python XML 解析

XML(Extensible Markup Language)是一种比 HTML 更加通用的标记语言,用于定义文档结构。Python 提供了许多库用于解析和操作 XML 文档。

  1. DOM 解析

DOM(Document Object Model)解析基于文档的编程模型,它将整个 XML 文档解析为一个树形结构,每个节点代表着一个元素、属性或文本。Python 内置的 xml.dom 模块提供了 DOM 解析器。

以下是一个 DOM 解析的示例程序:

import xml.dom.minidom

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

# 获取根节点
root = dom.documentElement

# 获取子节点列表
items = root.getElementsByTagName("item")

# 遍历子节点
for item in items:
    name = item.getAttribute("name")
    price = item.getElementsByTagName("price")[0].childNodes[0].data
    print(name, price)
  1. SAX 解析

SAX(Simple API for XML)解析基于事件的编程模型,它不需要将整个文档读入内存,而是通过回调函数逐个处理文档中的元素、属性和文本。Python 内置的 xml.sax 模块提供了 SAX 解析器。

以下是一个 SAX 解析的示例程序:

import xml.sax

class ItemHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.current = ""
        self.name = ""
        self.price = ""

    def startElement(self, tag, attributes):
        self.current = tag
        if tag == "item":
            self.name = attributes["name"]

    def endElement(self, tag):
        if tag == "item":
            print(self.name, self.price)
            self.name = ""
            self.price = ""

    def characters(self, content):
        if self.current == "price":
            self.price = content

# 解析 XML 文件
parser = xml.sax.make_parser()
handler = ItemHandler()
parser.setContentHandler(handler)
parser.parse("example.xml")
  1. ElementTree 解析

ElementTree 是 Python 标准库中的一个模块,提供了一种简化的 XML 解析方式。它将解析的结果存储在一个 ElementTree 对象中,该对象包含了一棵完整的树形结构。

以下是一个 ElementTree 解析的示例程序:

import xml.etree.ElementTree as ET

# 解析 XML 文件
tree = ET.parse("example.xml")

# 获取根节点
root = tree.getroot()

# 遍历子节点
for item in root.findall("item"):
    name = item.get("name")
    price = item.find("price").text
    print(name, price)

以上是 Python 中 XML 解析的三种方式,开发者可以根据实际需要选择适合自己的方式。此外,Python 中还有许多第三方库可以用于 XML 的解析和操作,例如 lxml、Beautiful Soup 等。