13

我有一个 XPath 表达式,它为我提供了一系列值,如下所示:

1 2 2 3 4 5 5 6 7

1 2 3 4 5 6 7这很容易使用.转换为一系列唯一值distinct-values()。但是,我要提取的是重复值列表 = 2 5。我想不出一个简单的方法来做到这一点。任何人都可以帮忙吗?

4

4 回答 4

22

使用这个简单的 XPath 2.0 表达式

$vSeq[index-of($vSeq,.)[2]]

where$vSeq是我们要在其中找到重复项的值序列。

有关此“工作原理”的说明,请参见

http://dnovatchev.wordpress.com/2008/11/16/xpath-2-0-gems-find-all-duplicate-values-in-a-sequence-part-2/

TLDR;这张图片可以是一个视觉解释。

如果顺序是:

$vSeq  =  1,   2,   3,   2,   4,   5,   6,   7,   5,   7,   5

然后评估上面的 XPath 表达式会产生:2, 5, 7


在此处输入图像描述

于 2008-11-13T16:11:30.457 回答
3

关于什么:

distinct-values(
  for $item in $seq
  return if (count($seq[. eq $item]) > 1)
         then $item
         else ())

这将遍历序列中的项目,如果序列中等于该项目的项目数大于一,则返回该项目。然后,您必须使用distinct-values()从该列表中删除重复项。

于 2008-09-25T18:14:46.107 回答
0

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>
于 2008-09-28T20:50:01.067 回答
0

计算原始集和不同值集之间的差异。这是多次出现的一组数字。请注意,如果此结果集中的数字在原始序列中出现两次以上,则它们不一定是不同的,因此如果需要,请再次转换为一组不同的值。

于 2008-09-25T13:23:56.323 回答