python - Python 的 xml.etree.ElementTree 叶元素的意外 bool 行为

标签 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>")

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

>>> 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/

相关文章:

Python;无法通过 select 控制死套接字

android - 渲染问题 @id/visible Android Studio

python - etree xml解析和删除

python - 如何使用 Python 2 和 Python 3 中的内置库 ElementTree 等实体解析 HTML?

Python:当子属性满足条件时提取XML元素值

python - openpyxl - 在现有合并单元格的 excel 文件中添加新行

python - 如何使用 Python 中的 API 重命名 Google Sheets 电子表格中的(工作)表?

python - QPushButton 内的 PyQt QHBoxLayout 文本被截断

java - 显示居中对齐的 Web View

python - DTD 验证失败(Python)