XPath查找文本节点是其他节点的兄弟节点

时间:2010-04-21 16:57:22

标签: xpath

给出以下html片段:

<fieldset>
  <legend>My Legend</legend>
  <p>Some text</p>
  Text to capture
</fieldset>

是否有一个xpath表达式只返回'Text to capture'文本节点?

尝试

/fieldset/text()
会产生三个节点,而不仅仅是我需要的节点。

2 个答案:

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