我做错了什么?
当在Python中使用我认为有效的XPath表达式时,我得到
语法错误:无效 predicate
我的代码是:
import xml.etree.ElementTree as ET
data = '''<root>
<child>
<p>aaa</p>
<p>bbb</p>
</child>
</root>'''
root = ET.fromstring(data)
p_element = root.findall(".//p[text()='aaa']")
print(p_element[0].text)
运行这段代码会产生一个无效的 predicate 错误,但我相信它是正确的。我使用的是Python 3.10.0版本,并在Windows上运行。
它似乎与XPath的text()
部分有关;去掉了它就不会出错了。
1条答案
按热度按时间qij5mzcb1#
.//p[text()='aaa']
是完全有效的XPath表达式。问题是ElementTree的XPath实现是不完整的。
对于您的XML,测试字符串值
.//p[.='aaa']
是一种解决方法,如果您坚持使用ElementTree
的话。最好只使用更好地遵循标准的XPath库,如lxml
。参见