如何用XPath获取XML层级结构中最后一个同名PGR元素?
解决XPath匹配目标PGR元素的问题
你的XML结构如下:
<?xml version = "1.0" encoding = "UTF-8"?> <ROOT> <PGR name="Group1"> <PGR name="SubGroup1.1"> <PGR name="SubGroup1.2"> <PRODUCT></PRODUCT> </PGR> </PGR> </PGR> <PGR name="Group2"> <PGR name="SubGroup2.1"> <PGR name="SubGroup2.2"> <PGR name="SubGroup2.3"> <PRODUCT></PRODUCT> </PGR> </PGR> </PGR> </PGR> </ROOT>
你之前用的//PGR[count(*)=0]之所以只返回1个结果,是因为这个表达式的逻辑是匹配没有任何子元素的PGR节点,但你要找的SubGroup1.2和SubGroup2.3这两个PGR下面都有<PRODUCT>子元素,它们的count(*)结果是1,完全不符合这个条件,自然不会被命中。
根据你的需求,这里有两种可行的XPath方案:
方案1:精准匹配节点名称
如果你明确知道目标节点的name属性值,直接用属性匹配是最精准的方式:
//PGR[@name='SubGroup1.2' or @name='SubGroup2.3']
方案2:通用匹配(按子元素特征)
如果你需要匹配所有直接包含PRODUCT子元素的PGR节点(也就是结构里最底层的PGR,正好对应你的两个目标节点),可以用更通用的表达式:
//PGR[PRODUCT]
这个表达式的逻辑是:匹配所有存在直接子元素PRODUCT的PGR节点。观察你的XML结构,上层的PGR节点子节点都是其他PGR,只有SubGroup1.2和SubGroup2.3下面是PRODUCT,所以这个表达式正好能返回你需要的2个元素。
你可以根据实际场景选择其中一种方案,两者都能满足你的需求。
内容的提问来源于stack exchange,提问作者xetra11
相关产品推荐
相关产品推荐

