Python minidom
最后修改于 2025 年 3 月 7 日
在本文中,我们将展示如何在 Python 中使用 minidom 模块进行 XML 解析和创建。minidom 模块为 XML 提供了一个轻量级的 DOM 接口,它是 Python 标准库的一部分。
minidom 模块可用于使用基于 DOM 的方法读取、写入和修改 XML 文档。
主要特性
- 用于解析和操作 XML 数据的简单 DOM API。
- 将 XML 表示为节点树(元素、属性等)。
- 适用于中小型 XML 文件。
使用 minidom 解析 XML
此示例展示了如何使用 minidom 解析 XML 文档。
main.py
from xml.dom import minidom
# XML data
xml_data = """
<products>
<product>
<id>1</id>
<name>Product 1</name>
<price>10.99</price>
<quantity>30</quantity>
</product>
<product>
<id>2</id>
<name>Product 2</name>
<price>20.99</price>
<quantity>130</quantity>
</product>
</products>
"""
# Parse the XML data
doc = minidom.parseString(xml_data)
# Get all product elements
products = doc.getElementsByTagName('product')
# Iterate over product elements
for product in products:
id = product.getElementsByTagName('id')[0].firstChild.data
name = product.getElementsByTagName('name')[0].firstChild.data
price = product.getElementsByTagName('price')[0].firstChild.data
qty = product.getElementsByTagName('quantity')[0].firstChild.data
print(f"Id: {id}, Name: {name}, Price: {price}, Quantity: {qty}")
在此,parseString 将 XML 字符串解析为 DOM 对象。我们使用 getElementsByTagName 查找元素,并使用 firstChild.data 提取其文本。
$ python main.py Id: 1, Name: Product 1, Price: 10.99, Quantity: 30 Id: 2, Name: Product 2, Price: 20.99, Quantity: 130
使用 minidom 修改 XML
此示例展示了如何使用 minidom 修改 XML 文档。
main.py
from xml.dom import minidom
# XML data
xml_data = """
<products>
<product>
<id>1</id>
<name>Product 1</name>
<price>10.99</price>
<quantity>30</quantity>
</product>
</products>
"""
# Parse the XML data
doc = minidom.parseString(xml_data)
# Modify the first product's price
product = doc.getElementsByTagName('product')[0]
price = product.getElementsByTagName('price')[0]
price.firstChild.data = '15.99'
# Add a new product
new_product = doc.createElement('product')
doc.documentElement.appendChild(new_product)
for tag, text in [('id', '2'), ('name', 'Product 2'),
('price', '30.99'), ('quantity', '200')]:
elem = doc.createElement(tag)
elem.appendChild(doc.createTextNode(text))
new_product.appendChild(elem)
# Print the modified XML
print(doc.toprettyxml(indent=" "))
我们通过更新 firstChild.data 来修改价格。 使用 createElement 创建一个新产品,并使用 createTextNode 添加文本节点。
使用 id 属性读取 XML 文件
此示例使用 minidom 读取带有 id 属性的 XML 文件。
products.xml
<products>
<product id="1">
<name>Product 1</name>
<price>10.99</price>
<quantity>30</quantity>
</product>
<product id="2">
<name>Product 2</name>
<price>20.99</price>
<quantity>130</quantity>
</product>
</products>
产品具有 id 作为属性。
main.py
from xml.dom import minidom
file_name = 'products.xml'
# Parse the XML file
doc = minidom.parse(file_name)
products = doc.getElementsByTagName('product')
# Iterate over product elements
for product in products:
product_id = product.getAttribute('id')
name = product.getElementsByTagName('name')[0].firstChild.data
price = product.getElementsByTagName('price')[0].firstChild.data
qty = product.getElementsByTagName('quantity')[0].firstChild.data
print(f"Id: {product_id}, Name: {name}, Price: {price}, Quantity: {qty}")
我们使用 getAttribute 提取 id 属性,并使用 firstChild.data 获取元素文本。
$ python main.py Id: 1, Name: Product 1, Price: 10.99, Quantity: 30 Id: 2, Name: Product 2, Price: 20.99, Quantity: 130
使用 minidom 写入 XML
此示例使用 minidom 创建和写入 XML 文档。
main.py
from xml.dom import minidom
# Create the document
doc = minidom.Document()
# Create the root element
root = doc.createElement('products')
doc.appendChild(root)
# Create product elements
for i, (name, price, qty) in enumerate([
('Product 1', '10.99', '30'),
('Product 2', '20.99', '130')
], 1):
product = doc.createElement('product')
root.appendChild(product)
for tag, text in [('id', str(i)), ('name', name),
('price', price), ('quantity', qty)]:
elem = doc.createElement(tag)
elem.appendChild(doc.createTextNode(text))
product.appendChild(elem)
# Write to file with pretty printing
with open('products2.xml', 'w', encoding='utf-8') as f:
f.write(doc.toprettyxml(indent=" "))
print("XML file created successfully with proper indentation.")
我们使用 createElement 和 createTextNode 构建 XML 结构,然后使用 toprettyxml 写入它。
来源
本文演示了如何在 Python 中使用 minidom 模块进行 XML 解析、修改和创建。
作者
列出所有 Python 教程。