xpath
1. 使用 lxml
库
安装 lxml
首先,确保你已经安装了 lxml
库。可以使用以下命令进行安装:
pip install lxml
基本用法
lxml
提供了强大的 XML 解析和 XPath 查询功能。以下是一些常见的操作:
1.1 解析 XML 文档
你可以从字符串、文件或 URL 中解析 XML 文档。以下是从字符串解析的示例:
from lxml import etree
# 定义 XML 数据
xml_data = '''
<library>
<book>
<title>Python Programming</title>
<author>John Doe</author>
<price>29.99</price>
</book>
<book>
<title>XML Basics</title>
<author>Jane Smith</author>
<price>39.99</price>
</book>
</library>
'''
# 解析 XML 数据
tree = etree.fromstring(xml_data)
1.2 使用 XPath 查询
使用 xpath()
方法可以执行 XPath 查询。以下是一些常见的查询示例:
- 选择所有书籍的标题:
titles = tree.xpath('//book/title/text()')
print("书籍标题:", titles) # 输出: 书籍标题: ['Python Programming', 'XML Basics']
- 选择价格大于 30 的书籍:
expensive_books = tree.xpath('//book[price > 30]/title/text()')
print("价格大于 30 的书籍:", expensive_books) # 输出: 价格大于 30 的书籍: ['XML Basics']
- 选择所有作者的名字:
authors = tree.xpath('//book/author/text()')
print("作者:", authors) # 输出: 作者: ['John Doe', 'Jane Smith']
1.3 复杂查询
- 选择特定书籍的作者:
author_of_python_book = tree.xpath('//book[title="Python Programming"]/author/text()')
print("Python Programming 的作者:", author_of_python_book) # 输出: Python Programming 的作者: ['John Doe']
- 选择所有书籍的价格,并且价格包含小数点:
prices_with_decimal = tree.xpath('//book[price[contains(., ".")]]/price/text()')
print("价格包含小数点的书籍:", prices_with_decimal) # 输出: 价格包含小数点的书籍: ['29.99', '39.99']
1.4 处理 XML 文件
如果你的 XML 数据存储在文件中,可以使用 etree.parse()
方法来解析文件:
tree = etree.parse('path/to/your/file.xml')
然后可以使用相同的 XPath 查询方法。
2. 使用 xml.etree.ElementTree
库
xml.etree.ElementTree
是 Python 标准库的一部分,适合处理简单的 XML 文档。虽然它不直接支持 XPath,但可以通过 find()
和 findall()
方法进行类似的查询。
基本用法
2.1 解析 XML 文档
import xml.etree.ElementTree as ET
# 定义 XML 数据
xml_data = '''
<library>
<book>
<title>Python Programming</title>
<author>John Doe</author>
<price>29.99</price>
</book>
<book>
<title>XML Basics</title>
<author>Jane Smith</author>
<price>39.99</price>
</book>
</library>
'''
# 解析 XML 数据
root = ET.fromstring(xml_data)
2.2 使用 find()
和 findall()
- 查询所有书籍的标题:
titles = [book.find('title').text for book in root.findall('book')]
print("书籍标题:", titles) # 输出: 书籍标题: ['Python Programming', 'XML Basics']
- 查询价格大于 30 的书籍:
expensive_books = [book.find('title').text for book in root.findall('book') if float(book.find('price').text) > 30]
print("价格大于 30 的书籍:", expensive_books) # 输出: 价格大于 30 的书籍: ['XML Basics']
- 查询所有作者的名字:
authors = [book.find('author').text for book in root.findall('book')]
print("作者:", authors) # 输出: 作者: ['John Doe', 'Jane Smith']
2.3 处理 XML 文件
如果你的 XML 数据存储在文件中,可以使用 ET.parse()
方法来解析文件:
tree = ET.parse('path/to/your/file.xml')
root = tree.getroot()
然后可以使用 find()
和 findall()
方法进行查询。