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

How to extract nodes with no immediate text after them with XPath 1.0?

如何使用单个 XPath 1.0 表达式 select 某些至少有一个后续兄弟节点但在它们之后没有直接文本节点的节点?[​​=14=]

例如,来自以下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>

有没有更好更简单的方法?

这个 XPath,

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

将 select 具有紧随其后的不是文本节点的同级元素的所有元素。