5

Python2.6.5xml.etree.ElementTreeライブラリの使用で問題が発生しています。特に、次のような単純なxml要素を設定すると

>>> import xml.etree.ElementTree as etree
>>> xml = etree.fromstring("<a><b><c>xy</c></b></a>")

内部要素ノードにアクセスするときにライブラリに問題はありません。例:

>>> etree.tostring(xml.find('b'))
'<b><c>xy</c></b>'
>>> xml.find('b') == None
False
>>> bool(xml.find('b'))
True

ただし、リーフ要素ノードの奇妙なブール解釈に遭遇しています。以下を参照してください。

>>> etree.tostring(xml.find('b/c'))
'<c>xy</c>'
>>> xml.find('b/c') == None
False
>>> bool(xml.find('b/c'))
False

最後のコマンドでは、要素xml.find('b / c')は明らかにNoneではなく、Falseと評価されることに注意してください。イディオムが使えないので特に面倒です

>>> leaf = xml.find('b/c'):
>>> if leaf:
>>>     do_stuff(leaf)

リーフ要素が存在するかどうかを確認します。( 'xml.find(' b / c')!= None'を明示的にチェックする必要があります。)

誰かがこの(私にとっては予期しない)動作を説明できますか?

4

1 に答える 1

6

申し訳ありませんが、この質問を送信した後、Pythonのドキュメントでソリューションの明示的なステートメントを見つけました:http://docs.python.org/release/2.6.5/library/xml.etree.elementtree.html#the-element -インターフェイス、セクションの最後にあります。

注意:Elementオブジェクトはゼロ以外の()メソッドを定義しないため、サブ要素のない要素はFalseとしてテストされます。

ご不便おかけしてすみません。

于 2012-07-26T12:19:47.127 に答える