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'を明示的にチェックする必要があります。)
誰かがこの(私にとっては予期しない)動作を説明できますか?