如何结合preceding-sibling与following-sibling筛选XML节点?
解决方案
你的XPath已经满足了「筛选同时拥有前后兄弟节点<A>,且自身不是<A>」的条件,但缺少了「排除当前节点到后续第一个<A>节点之间存在<C>或<D>的节点」的限制。
修正后的XPath表达式如下:
//*[ not(self::A) and preceding-sibling::A and following-sibling::A and count(following-sibling::A[1]/preceding-sibling::*[self::C or self::D]) = 0 ]
逻辑说明:
not(self::A):排除<A>节点本身preceding-sibling::A:确保节点存在前置兄弟<A>following-sibling::A:确保节点存在后置兄弟<A>count(following-sibling::A[1]/preceding-sibling::*[self::C or self::D]) = 0:检查当前节点到它后续第一个<A>节点的区间内,不存在<C>或<D>节点
将该表达式应用到你的XML示例中,会得到期望的输出:
<k>want</k> <b>want</b> <j>want</j>
内容的提问来源于stack exchange,提问作者jessika perignon
相关产品推荐
相关产品推荐

