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