给出以下html片段:
<fieldset>
<legend>My Legend</legend>
<p>Some text</p>
Text to capture
</fieldset>
是否有一个xpath表达式只返回'Text to capture'文本节点?
尝试
/fieldset/text()会产生三个节点,而不仅仅是我需要的节点。
答案 0 :(得分:7)
假设你想要的是包含非空白文本的文本节点:
//fieldset/text()[normalize-space(.)]
如果你想要的是最后一个文本节点,那么:
//fieldset/text()[last()]
答案 1 :(得分:7)
我建议你接受Steven D. Majewski的回答,但这里是解释(文字节点用方括号突出显示):
<fieldset>[
]<legend>My Legend</legend>[
]<p>Some text</p>[
Text to capture
]</fieldset>
所以/fieldset/text()
返回
"\n "
"\n "
"\n Text to capture\n"
这就是你想要/fieldset/text()[normalize-space()]
的原因,并且你希望在使用之前修剪结果。
另请注意,上述内容仅适用于/fieldset/text()[normalize-space(.) != '']
。当normalize-space()
返回非空字符串时,谓词的计算结果为true
,而空字符串的计算结果为false
。