使用selector()函数解析XML数据
发布时间:2023-12-24 15:52:24
selector()函数是Python中使用XPath语法来解析XML数据的一个非常有用的函数。该函数可以使用XPath表达式来搜索XML文档中的某个节点或者节点集合,并返回相应的结果。
下面是一个使用selector()函数解析XML数据的示例:
from lxml import etree
# 构建一个XML文档
data = '''
<books>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giacomo Puccini</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2003</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</books>
'''
# 创建一个XPath解析对象
tree = etree.XML(data)
# 使用XPath表达式来获取所有book节点的title子节点的文本内容
titles = tree.xpath('//book/title/text()')
print(titles) # 输出:['Everyday Italian', 'Harry Potter', 'Learning XML']
# 使用XPath表达式来获取所有book节点的category属性值为'cooking'的节点
cooking_books = tree.xpath('//book[@category="cooking"]')
for book in cooking_books:
print('Title:', book.xpath('./title/text()')[0])
print('Author:', book.xpath('./author/text()')[0])
print('Year:', book.xpath('./year/text()')[0])
print('Price:', book.xpath('./price/text()')[0])
'''
输出:
Title: Everyday Italian
Author: Giacomo Puccini
Year: 2005
Price: 30.00
'''
# 使用XPath表达式来获取所有book节点的year子节点的文本内容,并返回一个生成器对象
years = tree.iterfind('//book/year')
for year in years:
print(year.text)
'''
输出:
2005
2003
2003
'''
在上述示例中,我们首先使用字符串构建了一个XML文档。然后,我们使用etree.XML()函数将字符串解析成一个XPath解析对象,即根节点。接下来,我们使用XPath表达式获取了XML文档中所有book节点的title子节点的文本内容,并返回一个包含这些文本内容的列表。
然后,我们使用XPath表达式获取了XML文档中所有category属性值为'cooking'的book节点,并遍历了这些节点,打印了它们的title、author、year和price的文本内容。
最后,我们使用XPath表达式获取了XML文档中所有book节点的year子节点的文本内容,并返回一个生成器对象。我们通过遍历这个生成器对象,打印了每个year节点的文本内容。
通过使用selector()函数,我们可以轻松地使用XPath语法来解析XML数据,并对所需节点进行搜索和操作。这使得处理XML数据变得更加简单和高效。
