5

我在使用 Python 2.6.5 xml.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 -interface,在该部分的末尾。

注意:因为 Element 对象没有定义非零() 方法,没有子元素的元素将测试为 False。

带来不便敬请谅解。

于 2012-07-26T12:19:47.127 回答