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

hig*_*ted 2 xpath

给出以下html片段:

<fieldset>
  <legend>My Legend</legend>
  <p>Some text</p>
  Text to capture
</fieldset>
Run Code Online (Sandbox Code Playgroud)

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

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

小智 7

假设你想要的是包含非空白文本的文本节点:

//fieldset/text()[normalize-space(.)]
Run Code Online (Sandbox Code Playgroud)

如果你想要的是最后一个文本节点,那么:

//fieldset/text()[last()]
Run Code Online (Sandbox Code Playgroud)


Tom*_*lak 7

我建议你接受Steven D. Majewski的回答,但这里是解释(文字节点用方括号突出显示):

<fieldset>[
  ]<legend>My Legend</legend>[
  ]<p>Some text</p>[
  Text to capture
]</fieldset>
Run Code Online (Sandbox Code Playgroud)

所以/fieldset/text()回归

  • "\n "
  • "\n "
  • "\n Text to capture\n"

这就是您想要的原因/fieldset/text()[normalize-space()],并且您希望在使用前修剪结果.

另请注意,以上是简称/fieldset/text()[normalize-space(.) != ''].当normalize-space()返回非空字符串时,谓词求值为true,而空字符串求值为false.