我在Python中使用xml.etree
来解析SOAP响应(不要问......)。响应包含<Success />
元素。
我去搜索它,找到并获得xml.etree.ElementTree.Element
个实例,让我们称之为my_element
。
然而,所述实例评估为False
bool(my_element)
为假my_element.__nonzero__()
是False
(使用Python 2.7,否则我当然会检查__bool__()
)。 我认为这是因为my_element.text
为空,因为<Success />
是一个空的xml元素。
我还假设这是一个pythonic的事情,因为空列表和dicts表现相似 - 即使我认为空的但现有的XML元素的含义是不同的:检查它是否存在的最pythonic方法是什么?
真的如下吗?
from xml.etree.ElementTree import Element
...
if isinstance(my_element, Element):
答案 0 :(得分:1)
不,isinstance
不是检查Element
不存在的推荐方式。
来自the docs:
警告:没有子元素的元素将测试为False。此行为将在以后的版本中更改。请改用特定的
len(elem)
或elem is None
测试。
来自the source:
warnings.warn( "The behavior of this method will change in future versions. " "Use specific 'len(elem)' or 'elem is not None' test instead.", FutureWarning, stacklevel=2 )
要测试元素不存在,请执行以下操作:
my_element = tree.find('.//Success')
if my_element is not None:
do_something(my_element)