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]]

ここ$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 ())

これは、シーケンス内のアイテムを反復処理し、そのアイテムと等しいシーケンス内のアイテムの数が 1 より大きい場合にそのアイテムを返します。次にdistinct-values()、そのリストから重複を削除するために使用する必要があります。

于 2008-09-25T18:14:46.107 に答える
0

元のセットと個別の値のセットの差を計算します。これは、複数回発生する一連の番号です。この結果セットの数値は、元のシーケンスで2回以上出現する場合は必ずしも区別されないため、必要に応じて、区別される値のセットに再度変換することに注意してください。

于 2008-09-25T13:23:56.323 に答える
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 に答える