使用字符串值搜索 lxml xpath 元素的奇怪结果



无法理解以下 xpath 查询的结果:

from lxml import etree
from io import StringIO
s = '<aaa><bbb>f<ccc>e</ccc>d</bbb></aaa>'
tree = etree.parse(StringIO(s))
print(tree.xpath('//bbb[.="fed"]')) #prints an empty list!

根据 XPath 规范,

元素节点的字符串值

是元素节点的所有文本节点后代的字符串值按文档顺序串联而成。

所以我希望得到bbb元素。

更令人困惑的是,以下每个查询都返回bbb

tree.xpath('//bbb[contains(.,"fed")]')
tree.xpath('//bbb[normalize-space(.)="fed"]')
tree.xpath('//bbb[string-length(.)=3]')

我错在哪里?还是 lxml 中的错误?

//bbb[.="fed"]XPath 表示您期待bbb标签,该标签具有馈送的文本

验证您的 xpath 是否正确,或者不会从同一 xpath 返回多个值。

如果您希望我们为您创建 XPath,请发布您的 DOM/链接

希望它能帮助你:)

原来是一个错误。现已修复(已检查 lxml v. 4.5.1(。

最新更新