python XPath语法错误:带有text()的 predicate 无效

jtw3ybtb  于 2023-05-12  发布在  Python
关注(0)|答案(1)|浏览(135)

我做错了什么?
当在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()部分有关;去掉了它就不会出错了。

qij5mzcb

qij5mzcb1#

.//p[text()='aaa']是完全有效的XPath表达式。
问题是ElementTree的XPath实现是不完整的。
对于您的XML,测试字符串值.//p[.='aaa']是一种解决方法,如果您坚持使用ElementTree的话。最好只使用更好地遵循标准的XPath库,如lxml

参见

相关问题