如何使用XPath 2.0识别数字序列中的重复值?
时间:2020-03-06 14:43:05 来源:igfitidea点击:
我有一个XPath表达式,它提供了一系列类似于以下值的值:
1 2 2 3 4 5 5 6 7
使用distinct-values()
可以很容易地将其转换为一组唯一值1 2 3 4 5 6 7
。但是,我要提取的是重复值列表= 2 5. 我想不出一种简单的方法来做到这一点。有人可以帮忙吗?
解决方案
计算原始集与不同值集之间的差异。这是多次出现的一组数字。请注意,如果该结果集中的数字在原始序列中出现两次以上,则不一定是唯一的,因此如果需要,可以再次将其转换为一组不同的值。
关于什么:
distinct-values( for $item in $seq return if (count($seq[. eq $item]) > 1) then $item else ())
这将迭代序列中的项目,如果序列中等于该项目的项目数大于一个,则返回该项目。然后,我们必须使用distinct-values()
从该列表中删除重复项。
XSL呢?
适用于要求吗?
<xsl:for-each select="/r/a"> <xsl:variable name="cur" select="." /> <xsl:if test="count(./preceding-sibling::a[. = $cur]) > 0 and count(./following-sibling::a[. = $cur]) = 0"> <xsl:value-of select="." /> </xsl:if> </xsl:for-each>
使用以下简单的XPath 2.0表达式:
$vSeq[index-of($vSeq,.)[2]]
其中$ vSeq是我们要在其中查找重复项的值序列。
有关此"工作原理"的说明,请参见:
http://dnovatchev.wordpress.com/2008/11/16/xpath-2-0-gems-find-all-duplicate-values-in-a-sequence-part-2/