Python XPath包含缺少的元素

时间:2015-06-22 02:03:23

标签: python xml xpath xml-parsing

<tree>
    <item>
        <element1>somedata</element1>
        <element2>moredata</element2>
        <element3>data?</element3>
        <optional_element>data!</optional_element>
    </item>
    <item>
        <element1>somedata</element1>
        <element2>moredata</element2>
        <element3>data?</element3>
    </item>
    <item>
        <element1>somedata</element1>
        <element2>moredata</element2>
        <element3>data?</element3>
        <optional_element>data!</optional_element>
    </item>
    <item>
        <element1>somedata</element1>
        <element2>moredata</element2>
        <element3>data?</element3>
    </item>
</tree>

我有一个像这样的XML文档,我想要实现的是获得这种输出: ["data!", "", "data!", ""]而非["data!", "data!"] 到目前为止,我已尝试this方法而无法使其工作(列表仍然只包含存在的元素)。

1 个答案:

答案 0 :(得分:3)

我会使用findtext()并指定default

[item.findtext("optional_element", default="") for item in tree.findall("item")]

演示(使用lxml):

>>> from lxml import etree
>>> 
>>> data = """<?xml version="1.0" encoding="utf-8"?>
... <tree>
...     <item>
...         <element1>somedata</element1>
...         <element2>moredata</element2>
...         <element3>data?</element3>
...         <optional_element>data!</optional_element>
...     </item>
...     <item>
...         <element1>somedata</element1>
...         <element2>moredata</element2>
...         <element3>data?</element3>
...     </item>
...     <item>
...         <element1>somedata</element1>
...         <element2>moredata</element2>
...         <element3>data?</element3>
...         <optional_element>data!</optional_element>
...     </item>
...     <item>
...         <element1>somedata</element1>
...         <element2>moredata</element2>
...         <element3>data?</element3>
...     </item>
... </tree>
... """
>>> 
>>> tree = etree.fromstring(data)
>>> print [item.findtext("optional_element", default="") for item in tree.findall("item")]
['data!', '', 'data!', '']