如果没有文本数据,xpath是否可以返回NULL?

时间:2014-05-31 23:11:06

标签: xpath

我目前正在尝试从表中提取所有数据。没有数据时,表数据行的格式为<td headers="h1" align="left"></td>

使用etree.tostring()库中的lxml方法将这些元素打印为<td headers="h1" align="left"/>而不是源格式。

此外,如果我运行代码xpath,则使用tree.path('//td[@headers="h1"]/text()')结果列表不包含没有数据的空白值。

当我尝试将这些结果写入CSV文件时,如何在没有数据时包含NULL,即""

1 个答案:

答案 0 :(得分:1)

一种解决方法是使用//td[@headers="h1"] xpath获取元素,然后在每个元素上获取.text属性:

from lxml import etree

data = """
<table>
    <tr>
        <td headers="h1" align="left"></td>
        <td headers="h1" align="left">Text1</td>
        <td headers="h1" align="left"/>
        <td headers="h1" align="left">Text2</td>
        <td headers="h1" align="left"></td>
    </tr>
</table>
"""

tree = etree.fromstring(data)
print [element.text for element in tree.xpath('//td[@headers="h1"]')]

打印:

[None, 'Text1', None, 'Text2', None]

如果您想要空字符串而不是None

print [element.text if element.text is not None else ''
       for element in tree.xpath('//td[@headers="h1"]')]

会打印:

['', 'Text1', '', 'Text2', '']

另见:How do I return '' for an empty node's text() in XPath?