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

Python中的XML解析库有哪些

发布时间:2024-01-04 06:30:15

在Python中,有以下几种常用的XML解析库:ElementTree、lxml、xml.dom、xml.sax。下面将分别介绍这几种库的使用方法,并给出相应的例子。

1. ElementTree:

ElementTree是Python的内置库,提供了一个简单的API来解析和操作XML文件。

import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('data.xml')
root = tree.getroot()

# 遍历XML元素
for child in root:
    print(child.tag, child.attrib)

# 访问元素的文本内容
for elem in tree.iter():
    if elem.text is not None:
        print(elem.text)

# 修改元素的属性和文本内容
for elem in tree.iter('name'):
    elem.attrib['attr'] = 'new_attr'
    elem.text = 'new_text'

# 保存修改后的XML文件
tree.write('output.xml')

2. lxml:

lxml是Python的一个高性能的XML解析库,基于C语言实现,提供了更多的功能和速度优势。

from lxml import etree

# 解析XML文件
tree = etree.parse('data.xml')
root = tree.getroot()

# 遍历XML元素
for elem in root.iter():
    print(elem.tag, elem.attrib)

# 访问元素的文本内容
for elem in tree.iter():
    if elem.text is not None:
        print(elem.text)

# 修改元素的属性和文本内容
for elem in tree.iter('name'):
    elem.attrib['attr'] = 'new_attr'
    elem.text = 'new_text'

# 保存修改后的XML文件
tree.write('output.xml', pretty_print=True)

3. xml.dom:

xml.dom是Python的内置库,提供了一种基于DOM(Document Object Model)的XML解析方式。

from xml.dom import minidom

# 解析XML文件
doc = minidom.parse('data.xml')

# 获取根节点
root = doc.documentElement

# 遍历XML元素
nodes = root.childNodes
for node in nodes:
    if node.nodeType == node.ELEMENT_NODE:
        print(node.tagName, node.attributes.items())

# 访问元素的文本内容
texts = doc.getElementsByTagName('text')
for text in texts:
    print(text.firstChild.data)

# 修改元素的属性和文本内容
elems = doc.getElementsByTagName('elem')
for elem in elems:
    elem.setAttribute('attr', 'new_attr')
    elem.firstChild.data = 'new_text'

# 保存修改后的XML文件
with open('output.xml', 'w') as f:
    doc.writexml(f, encoding='utf-8')

4. xml.sax:

xml.sax是Python的内置库,提供了一种基于事件驱动的XML解析方式。

import xml.sax

class MyHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.current = ''
        self.attr = {}

    def startElement(self, name, attrs):
        self.current = name
        if attrs:
            self.attr[self.current] = attrs.getQNames()

    def characters(self, data):
        if self.current == 'text':
            print(data)

    def endElement(self, name):
        self.current = ''

parser = xml.sax.make_parser()
handler = MyHandler()
parser.setContentHandler(handler)
parser.parse('data.xml')

以上就是Python中常用的XML解析库的介绍和使用例子,根据实际需求和个人喜好,可以选择适合自己的库进行XML文件的解析和操作。