找到了Python XML元素,但计算结果为False - 如何以pythonically方式检查存在?

时间:2016-08-02 16:16:48

标签: python xml python-2.7

我在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):

1 个答案:

答案 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)