Python的xml.etree.ElementTree叶元素的意外布尔行为

MRA*_*MRA 5 python xml elementtree

我在使用Python 2.6.5 xml.etree.ElementTree库时遇到了一些麻烦.特别是,如果我设置一个简单的xml元素,如下所示

>>> import xml.etree.ElementTree as etree
>>> xml = etree.fromstring("<a><b><c>xy</c></b></a>")
Run Code Online (Sandbox Code Playgroud)

访问内部元素节点时,我对库没有任何问题,例如:

>>> etree.tostring(xml.find('b'))
'<b><c>xy</c></b>'
>>> xml.find('b') == None
False
>>> bool(xml.find('b'))
True
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了对叶元素节点的一个奇怪的布尔解释,请参阅:

>>> etree.tostring(xml.find('b/c'))
'<c>xy</c>'
>>> xml.find('b/c') == None
False
>>> bool(xml.find('b/c'))
False
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一个命令中,元素xml.find('b/c')(显然是非None)的计算结果为False.这特别烦人,因为我不能使用这个成语

>>> leaf = xml.find('b/c'):
>>> if leaf:
>>>     do_stuff(leaf)
Run Code Online (Sandbox Code Playgroud)

检查是否存在叶元素.(我必须明确检查'xml.find('b/c')!=无'.)

有人可以解释这个(对我来说意外)的行为吗?

MRA*_*MRA 6

好了,对不起,提交了这个问题后,我发现Python的文档中的解决方案的明确声明:http://docs.python.org/release/2.6.5/library/xml.etree.elementtree.html#the-element - 接口,在该部分的末尾.

警告:由于Element对象未定义nonzero()方法,因此没有子元素的元素将测试为False.

抱歉给你带来不便.