如何在 XPath 中为空节点的 text() 返回 '' ?

问题描述 投票:0回答:3

<td></td><td>foo</td>

我想返回

['', 'foo']
但 libxml 的 xpath
//td/text()
仅返回
['foo']
。如何找到空标签为
''
而不是(不匹配)?

xpath libxml2
3个回答
8
投票

虽然@Tomalak 是完全正确的,但在 XPath 2.0 中可以使用

//td/string(.)

这会产生一系列字符串——每个字符串都包含相应

td
元素的字符串值。

因此,在您的情况下,结果将是所需的结果:

"", "foo"


7
投票

只要您专门选择文本节点,就不能。因为第一个

<td>
中根本没有文本节点。

当您将 XPath 表达式更改为

'//td'
时,您将获得两个
<td>
节点。在进一步处理中使用它们的文本值。


0
投票
# pip install parsel
from parsel import Selector

html = """
    <td>foo</td>
    <td></td>
"""
root = selector = Selector(text=html)
tds = selector.xpath('//td').xpath('string(.)')

for td in tds:
    if td.root == '':
        print('null')
    else:
        print(td.root)
# output
foo
null
© www.soinside.com 2019 - 2024. All rights reserved.