使用xpath查找包含特定文本的xml元素,或者使用lxml在python中查找
我正在尝试查找所有具有值的使用xpath查找包含特定文本的xml元素,或者使用lxml在python中查找,python,xpath,lxml,Python,Xpath,Lxml,我正在尝试查找所有具有值的book元素abc,即name标记值。我使用了xpath: val=xml1.xpath('//bookstore/book/name[text()=“abc”]) 但它却一无所获 <bookstore> <book> <name>abc</name> <price>30</price> </book> <book> <name>Learn
book
元素abc
,即name
标记值。我使用了xpath:
val=xml1.xpath('//bookstore/book/name[text()=“abc”])
但它却一无所获
<bookstore>
<book>
<name>abc</name>
<price>30</price>
</book>
<book>
<name>Learning XML</name>
<price>56</price>
</book>
</bookstore>
abc
30
学习XML
56
将Id属性添加到图书标签
root.xpath(“//bookstore/book/name[text()='abc']
它将给出所有name
元素的列表,其中text
不是父元素
检查以下内容:
>>> data = """<bookstore>
... <book id="1">
... <name>abc</name>
... <price>30</price>
... </book>
... <book id="2">
... <name>Learning XML</name>
... <price>56</price>
... </book>
... </bookstore> """
>>> root = PARSER.fromstring(data)
>>> root.xpath("//bookstore/book")
[<Element book at 0xb726d144>, <Element book at 0xb726d2d4>]
>>> root.xpath("//bookstore/book/name[text()='abc']")
[<Element name at 0xb726d9b4>]
>>> root.xpath("//bookstore/book/name[text()='abc']/parent::*")
[<Element book at 0xb726d7d4>]
>>> root.xpath("//bookstore/book/name[text()='abc']/parent::*")[0].attrib
{'id': '1'}
以下是一种方法:
from lxml import etree
# Create an ElementTree instance
tree = etree.parse("bookstore.xml")
# Get all 'book' elements that have a 'name' child with a string value of 'abc'
books = tree.xpath('book[name="abc"]')
# Print name and price of those books
for book in books:
print book.find("name").text, book.find("price").text
使用问题中的XML时的输出:
abc 30
就我所知,发布的XPath应该可以工作。可能问题是您的实际XML具有默认名称空间,不是吗?问题中的XPath选择
name
元素。我的解释是OP希望book
元素具有具有特定值的name
子元素。
abc 30