我有一个XPath表达式,它为我提供了一系列值,如下所示:
1 2 2 3 4 5 5 6 7
使用1 2 3 4 5 6 7
很容易将其转换为一组唯一值distinct-values()
。但是,我要提取的是重复值列表= 2 5
。我想不出一个简单的方法来做到这一点。有人可以帮忙吗?
答案 0 :(得分:17)
使用这个简单的XPath 2.0表达式:
$vSeq[index-of($vSeq,.)[2]]
其中$vSeq
是我们想要找到重复项的值序列。
有关此“有效”的说明,请参阅:
TLDR; 这张照片可以是一个直观的解释。
如果序列是:
$vSeq = 1, 2, 3, 2, 4, 5, 6, 7, 5, 7, 5
然后评估上面的XPath表达式会产生:2, 5, 7
答案 1 :(得分:3)
怎么样:
distinct-values(
for $item in $seq
return if (count($seq[. eq $item]) > 1)
then $item
else ())
这将遍历序列中的项目,如果序列中与该项目相等的项目数大于1,则返回该项目。然后,您必须使用distinct-values()
从该列表中删除重复项。
答案 2 :(得分:1)
计算原始集与不同值集之间的差异。这是不止一次出现的数字集。请注意,如果结果集中的数字在原始序列中出现的次数超过两次,则它们不一定是不同的,因此如果需要,则再次转换为一组不同的值。
答案 3 :(得分:-1)
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>