如何使用XPath 1.0提取其后没有立即文本的节点?

时间:2018-02-08 10:44:41

标签: xml xpath xpath-1.0

如何使用单个XPath 1.0表达式选择具有至少一个后续兄弟节点但后面没有立即文本节点的某些节点?

例如,从以下XML:

<p>This is some <b>forma</b><b>tted</b> text, this is <b>bold</b>.</p>

我想提取第一个<b>标记。

到目前为止,我已经提出了以下表达式:

//b[following-sibling::*[1][self::b]][not(text() = following-sibling::text()[1]/preceding-sibling::*[1][self::b]/text())]

但是,它不会提取具有相同文本的标记,例如:

<p>I am hungry for <b>paw</b><b>paw</b>.</p>

可能有更好更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

此XPath,

//*[following-sibling::node()[1][not(self::text())]]

将选择所有具有紧随其后的兄弟姐妹而不是文本节点的元素。