使用字符串值

时间:2017-08-25 21:06:04

标签: python xml xpath lxml

无法理解以下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中的错误?

2 个答案:

答案 0 :(得分:0)

// bbb [。=“fed”] XPath意味着您期待 bbb 标记,其中的文字为 fed

验证xpath是否正确或不从同一xpath返回多个值。

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

希望它会对你有所帮助:)。

答案 1 :(得分:0)

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