我在使用 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
但是,我遇到了一个奇怪的叶元素节点的 bool 值解释,请参阅:
>>> etree.tostring(xml.find('b/c'))
'<c>xy</c>'
>>> xml.find('b/c') == None
False
>>> bool(xml.find('b/c'))
False
请注意,在最后一个命令中,显然非 None 的元素 xml.find('b/c') 的计算结果为 False。这特别烦人,因为我不能使用成语
>>> leaf = xml.find('b/c'):
>>> if leaf:
>>> do_stuff(leaf)
检查叶元素是否存在。 (我必须明确检查 'xml.find('b/c') != None'。)
有人可以解释这种(对我来说出乎意料的)行为吗?
最佳答案
好的,不好意思,提交这个问题后我在Python文档中找到了解决方案的明确说明:http://docs.python.org/release/2.6.5/library/xml.etree.elementtree.html#the-element-interface , 在本节的末尾。
Caution: Because Element objects do not define a nonzero() method, elements with no subelements will test as False.
对于给您带来的不便,我们深表歉意。
关于python - Python 的 xml.etree.ElementTree 叶元素的意外 bool 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669001/