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

问题描述 投票:0回答:1

如何使用单个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>

愿有更好更简单的方法吗?

xml xpath xpath-1.0
1个回答
2
投票

这个XPath,

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

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

© www.soinside.com 2019 - 2024. All rights reserved.