如何用XPath选择完整节点路径而非仅最后匹配的节点?
获取包含指定子节点结构的完整TagA节点的XPath写法
你的XML结构:
... <TagA> <TagB Name="MyTagB"/> <TagB Name="MyOtherTagB"/> </TagA> ...
原来的XPath只返回<TagB Name="MyOtherTagB"/>,是因为路径是从符合条件的TagB[@Name='MyTagB']出发,定位它的后续兄弟节点,自然只会返回这个兄弟节点。要拿到整个TagA,需要把判断逻辑作为TagA的筛选条件,写法如下:
//*[local-name()='TagA'][*[local-name()='TagB' and @Name='MyTagB']/following-sibling::*[local-name()='TagB' and @Name='MyOtherTagB']]
逻辑说明
这个表达式的核心是:
- 先定位所有
TagA节点(//*[local-name()='TagA']) - 给
TagA加筛选条件:该节点内部存在一个TagB[@Name='MyTagB'],且这个TagB的后续兄弟节点中存在TagB[@Name='MyOtherTagB']
这样就能精准选中包含指定子节点结构的完整TagA节点。
内容的提问来源于stack exchange,提问作者Febertson
相关产品推荐
相关产品推荐

