XPath1.0单语句实现XML指定元素不同取值的出现次数统计
问题原因
你写的count(//ZDPANR[.=(.)])中,谓词[]内部的.的上下文是当前正在被筛选的ZDPANR节点,两个.都指向同一个正在被判断的节点,相当于判断永远为真,最终统计的是所有ZDPANR节点的总数量,自然得不到正确的分组统计结果。
解决方案
XSLT 1.0 提供了标准的current()函数,该函数可以直接返回当前for-each循环上下文的节点,也就是你当前遍历到的去重后的ZDPANR节点,完全符合你单条XPath实现的需求。
修改后的代码如下:
<xsl:for-each select="//ZDPANR[not(.=following::ZDPANR) and .!='']"> <td> <xsl:value-of select="count(//ZDPANR[. = current()])"/> </td> </xsl:for-each>
验证结果
针对你提供的示例XML,运行后会依次输出3、1、2,对应PALLET1出现3次、PALLET3出现1次、PALLET2出现2次,和实际取值的统计结果完全正确。
内容的提问来源于stack exchange,提问作者AbRe
相关产品推荐
相关产品推荐

