如何编写XPath查询获取存在同标签Text兄弟节点的Text元素?
筛选有同类型兄弟节点的Text元素的XPath方案
正确的XPath表达式
要获取所有拥有同为Text元素的兄弟节点的Text元素,推荐使用以下表达式:
Body//Text[preceding-sibling::Text or following-sibling::Text]
这个表达式逻辑清晰:匹配所有前面存在Text类型兄弟节点,或者后面存在Text类型兄弟节点的Text元素,正好满足你“有同类型兄弟”的需求。
如果你的场景只需要筛选后面有Text兄弟的元素,也可以用简化版:
Body//Text[following-sibling::Text]
不过前者能覆盖所有存在同类型兄弟的情况,适用性更广。
原表达式失败的原因
你之前尝试的Body//Text[.= following-sibling]存在两处错误:
- 语法错误:
following-sibling必须指定具体的节点类型,比如following-sibling::Text,不能单独使用 - 逻辑错误:这个表达式是在比较当前节点的文本内容和兄弟节点,而不是判断是否存在同类型兄弟,完全偏离了需求方向。
效果验证
用你提供的示例XML测试第一个表达式,会返回全部3个Text元素——因为它们彼此都是同类型兄弟,完全符合预期。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

