2017-08-25 29 views
-1

次の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要素を得ると期待しています。

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

さらに困惑は、次のクエリのそれぞれがBBBを返すということですか?それとも、lxmlのバグですか?

「//bbb[.="fed

答えて

0

] XPathは、あなたのXPathが正しいかから複数の値を返さない場合

検証を与えてテキストを持っているBBBタグを期待していることを意味同じxpath。

ポストあなたのDOM /リンクは私たちのようなあなたのためのXPathを作成する場合

が、それはあなたを助けることを願っています:)

+0

確かに、私は理解しています。 xmlは上のコードの文字列にあります(これは単なる例です)。 ' f e d'です。そして、なぜ '/bb[[fed "]'が 'bbb'要素を返さないのか理解できません。とにかく助けてくれてありがとう。 – Aleksei