在Python中处理XML的教程
什么是XML?
XML是一种常用的表示和交换数据的格式。它是一种标记语言,与HTML类似,但没有预定义的标签集。相反,XML允许开发者定义适合自己应用程序的自定义标签。
以下是一个示例XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="科幻">
<title>深入浅出 Python</title>
<author>皮利吉亚尼</author>
<year>2021</year>
<price>99.00</price>
</book>
<book category="编程">
<title>The C Programming Language</title>
<author>Brian W. Kernighan</author>
<author>Dennis M. Ritchie</author>
<year>1978</year>
<price>39.00</price>
</book>
</bookstore>
如何在Python中处理XML?
Python的标准库xml
模块提供了一组用于处理XML的工具。下面是一些常用的类和函数:
ElementTree
ElementTree
是Python中内置的一种用于处理XML文件的工具。它提供了一种方便的方式来读取和写入XML文件,并支持将XML文件转换为Python的对象模型。
以下是一个简单的例子:
import xml.etree.ElementTree as ET
# 从文件中读取XML数据
tree = ET.parse('books.xml')
root = tree.getroot()
# 遍历XML文档
for book in root.findall('book'):
# 获取book的属性category的值
category = book.get('category')
# 获取book下面的子元素,例如title、author、year、price
title = book.find('title').text
author = book.find('author').text
year = book.find('year').text
price = book.find('price').text
# 打印结果
print(f'{category}: {title} - {author} ({year}) - {price}')
该示例读取并解析了一个名为books.xml
的XML文件,并使用ElementTree
库中的findall
和find
函数来访问XML节点,并生成Python表达式。
minidom
minidom
是Python标准库中一个轻量级的XML解析库,可以用于处理小型XML文件。
以下是一个简单的例子:
from xml.dom import minidom
# 从文件中读取XML数据
xml_file = minidom.parse('books.xml')
# 获取根元素
root = xml_file.documentElement
# 遍历XML文档
for book in root.getElementsByTagName('book'):
# 获取book的属性category的值
category = book.getAttribute('category')
# 获取book下面的子元素,例如title、author、year、price
title = book.getElementsByTagName('title')[0].childNodes[0].data
author = book.getElementsByTagName('author')[0].childNodes[0].data
year = book.getElementsByTagName('year')[0].childNodes[0].data
price = book.getElementsByTagName('price')[0].childNodes[0].data
# 打印结果
print(f'{category}: {title} - {author} ({year}) - {price}')
beautifulsoup4
beautifulsoup4
是一个Python库,提供了一种方便的方式来解析XML和HTML文件,生成Python的对象模型。
以下是一个简单的例子:
from bs4 import BeautifulSoup
# 从文件中读取XML数据
with open('books.xml', 'r') as xml_file:
soup = BeautifulSoup(xml_file, 'xml')
# 遍历XML文档
for book in soup.find_all('book'):
# 获取book的属性category的值
category = book['category']
# 获取book下面的子元素,例如title、author、year、price
title = book.title.text
author = book.author.text
year = book.year.text
price = book.price.text
# 打印结果
print(f'{category}: {title} - {author} ({year}) - {price}')
示例1:创建XML文件
import xml.etree.ElementTree as ET
# 创建根节点
root = ET.Element('bookstore')
# 创建第一本书的节点
book1 = ET.SubElement(root, 'book')
book1.set('category', '科幻')
# 创建书的子节点
title1 = ET.SubElement(book1, 'title')
title1.text = '深入浅出 Python'
author1 = ET.SubElement(book1, 'author')
author1.text = '皮利吉亚尼'
year1 = ET.SubElement(book1, 'year')
year1.text = '2021'
price1 = ET.SubElement(book1, 'price')
price1.text = '99.00'
# 创建第二本书的节点
book2 = ET.SubElement(root, 'book')
book2.set('category', '编程')
# 创建书的子节点
title2 = ET.SubElement(book2, 'title')
title2.text = 'The C Programming Language'
author2_1 = ET.SubElement(book2, 'author')
author2_1.text = 'Brian W. Kernighan'
author2_2 = ET.SubElement(book2, 'author')
author2_2.text = 'Dennis M. Ritchie'
year2 = ET.SubElement(book2, 'year')
year2.text = '1978'
price2 = ET.SubElement(book2, 'price')
price2.text = '39.00'
# 将XML写入文件
tree = ET.ElementTree(root)
tree.write('new_books.xml', encoding='UTF-8', xml_declaration=True)
该示例创建了一个新的XML文件new_books.xml
,并使用ElementTree
库中的Element
和SubElement
函数创建了一个简单的XML文件,该文件包含两本书。
示例2:在一个XML文件中添加新的节点
import xml.etree.ElementTree as ET
# 从文件中读取XML数据
tree = ET.parse('books.xml')
root = tree.getroot()
# 创建第三本书的节点
book3 = ET.Element('book')
book3.set('category', '计算机')
# 创建书的子节点
title3 = ET.SubElement(book3, 'title')
title3.text = 'Python编程实战'
author3 = ET.SubElement(book3, 'author')
author3.text = 'David Beazley'
year3 = ET.SubElement(book3, 'year')
year3.text = '2015'
price3 = ET.SubElement(book3, 'price')
price3.text = '59.00'
# 将新的book添加到XML文件中
root.append(book3)
# 将XML写入文件
tree.write('new_books.xml', encoding='UTF-8', xml_declaration=True)
该示例灵活使用Element
和SubElement
函数来创建一个新的XML节点,并将其添加到现有的XML文件中。运行该代码后,新的书籍“Python编程实战”将添加到books.xml
中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Python中处理XML的教程 - Python技术站