如何统计与特定<A>节点匹配的<C>后代节点对数?
解决方案
假设你需要统计的是所有位于//e/C路径下、且与对应层级的<A>节点匹配的<C>节点数量(这里的匹配默认指节点值相等,可根据实际需求调整匹配逻辑),可以使用以下XPath表达式:
count(//e/C[. = ancestor::e[not(e)]/A])
表达式说明:
//e/C:定位所有符合基础路径的<C>节点ancestor::e[not(e)]:精准找到<C>节点所属的最外层<e>祖先(即不再包含子<e>的上层<e>),避免误匹配深层或无关的<A>节点. = .../A:判断当前<C>节点的值是否等于对应外层<e>下的<A>节点的值,满足条件则计入统计
如果你的<A>节点是与<C>所在的直接父<e>同级的前置节点,可调整为更精准的表达式:
count(//e/C[. = parent::e/preceding-sibling::A])
针对你之前尝试的问题修正:
你之前的表达式错误在于未精准限定<A>的搜索范围,要么语法不符合XPath规范,要么匹配到了无关的祖先<A>、或是仅统计<A>节点本身。上述表达式通过锁定<A>的层级位置,彻底避免了误判情况。
内容的提问来源于stack exchange,提问作者MichaelChirico
相关产品推荐
相关产品推荐

