Python XML解析:综合指南

XML(可扩展标记语言)是一种用于存储和传输数据的流行语言。Python 提供了几个库来解析 XML。在本指南中,我们将向你介绍两个用于解析 XML 的内置 Python 库:xml.dom.minidom 和 xml.etree.ElementTree。

第1步:使用xml.dom.minidom进行XML解析

xml.dom.minidom 库允许你用 Python 解析 XML 文档。要解析一个 XML 字符串,使用 parseString 方法:

from xml.dom.minidom import parseString

xml_string = """
<library>
 <book>
   <title>The Great Gatsby</title>
   <author>F. Scott Fitzgerald</author>
   <year>1925</year>
 </book>
</library>
"""

document = parseString(xml_string)
print(document.getElementsByTagName("title")[0].firstChild.nodeValue)

在上面的代码中,我们解析了XML字符串并提取了书名。

第2步:使用xml.etree.ElementTree对XML进行解析

xml.etree.ElementTree(ET)库提供了一种更加Pythonic的方式来解析XML。要解析一个XML字符串,使用fromstring方法:

import xml.etree.ElementTree as ET

xml_string = """
<library>
 <book>
   <title>The Great Gatsby</title>
   <author>F. Scott Fitzgerald</author>
   <year>1925</year>
 </book>
</library>
"""

root = ET.fromstring(xml_string)
for child in root.iter():
   if child.text.strip():
       print(child.text)

在上面的代码中,我们解析了XML字符串,并打印了每个元素的文本。

第3步:解析XML文件

minidom和ElementTree都可以使用parse方法从文件中解析XML:

# Using minidom
from xml.dom.minidom import parse
document = parse("sample.xml")
print(document.getElementsByTagName("title")[0].firstChild.nodeValue)

# Using ElementTree
import xml.etree.ElementTree as ET
root = ET.parse("sample.xml")
for child in root.iter():
   if child.text.strip():
       print(child.text)

上面的代码演示了如何解析一个XML文件并打印一些元素。

第4步:将XML数据保存为CSV文件

在解析了XML之后,你可以使用pandas库将数据保存到CSV文件中:

import pandas as pd

parsed_dict = {
    "title": ["The Great Gatsby"],
    "author": ["F. Scott Fitzgerald"],
    "year": [1925]
}

df = pd.DataFrame(parsed_dict)
df.to_csv("parsed_xml_data.csv", index=False)

第5步:处理无效的XML

Beautiful Soup库可以解析可能存在错误的XML文档:

from bs4 import BeautifulSoup

invalid_xml = """
<root>
 <person>
  <name>John Doe</name>
  <message>This is a message & an invalid XML example.</message>
 </person>
</root>
"""

soup = BeautifulSoup(invalid_xml, features="lxml-xml")
print(soup.prettify())

Beautiful Soup可以处理无效的XML,但它比其他XML解析库要慢。

常见问题

使用xmltodict库。它是一个轻量级的库,使XML感觉像在使用JSON。

xml.dom.minidom是文档对象模型的实现,而xml.etree.ElementTree则为解析和创建XML提供了一个轻量级和Pythonic API。

考虑使用xml.etree.ElementTree库中的iterparse方法。它的内存效率更高,因为它通过XML文件进行迭代,而不是将整个文件加载到内存中。

常见的错误包括畸形的XML和编码错误。你可以使用像XML验证器这样的工具来确保你的XML是格式良好的,并在打开你的XML文件时指定正确的编码。

xml.dom.minidom 和 xml.etree.ElementTree 都支持命名空间。查看官方 Python 文档,了解如何处理命名空间的例子。

评论 (0)

这里还没有评论,你可以成为第一个评论者!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注


选择和购买代理

数据中心代理

轮流代理

UDP代理机构

受到全球 10000 多家客户的信赖

代理客户
代理客户
代理客户 flowch.ai
代理客户
代理客户
代理客户