鉴于测试html:
<html>
<body>
abc
<b id="b_1">def</b>
ghi
<b id="b_2">jkl</b>
<b id="b_3">mno</b><b id="b_4">qrs</b>
</body>
</html>
问题:如何选择其第一个前兄弟节点 are non-empty text nodes 的所有 b
元素?
因此,在上面的示例中,我希望选择元素 b_1
和 b_2
.
元素 b_3
具有text类型的第一个前一个兄弟节点,但它是空的 .
元素 b_4
具有作为元素节点的第一个前一个兄弟节点 .
我尝试了以下内容,但它们都至少在一个方面失败了:
-
preceding-sibling::*[1]
将选择第一个元素节点,忽略所需的文本节点 . -
preceding-sibling::text()[1]
将选择跳过任何元素节点的第一个文本节点 .
2 回答
这个XPath,
将选择其前一个兄弟是非空文本节点的所有
b
元素:按照要求 .
这应该工作:
normalize-space
函数是检查那里存在某个东西的函数,因为preceding-sibling
可能是空的,甚至只是\n
.