How do you identify duplicate values in a numerical sequence using XPath 2.0?

前端 未结 4 865
北海茫月
北海茫月 2020-11-30 11:30

I have an XPath expression which provides me a sequence of values like the one below:

1 2 2 3 4 5 5 6 7

It is easy to convert this to a set of u

相关标签:
4条回答
  • 2020-11-30 12:03

    Calculate the difference between your original set and the set of distinct values. This is the set of numbers that occur more than once. Note that numbers in this result set are not necessarily distinct if they occur more than twice in the original sequence so convert again to a set of distinct values if this is required.

    0 讨论(0)
  • 2020-11-30 12:09

    What about:

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

    This iterates through the items in the sequence, and returns the item if the number of items in the sequence that are equal to that item is greater than one. You then have to use distinct-values() to remove the duplicates from that list.

    0 讨论(0)
  • 2020-11-30 12:10

    What about xsl? Is it applicable to your request?

        <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>
    
    0 讨论(0)
  • 2020-11-30 12:17

    Use this simple XPath 2.0 expression:

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

    where $vSeq is the sequence of values in which we want to find the duplicates.

    For explanation of how this "works", see:

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

    TLDR; This picture can be a visual explanation.

    If the sequence is:

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

    Then evaluating the above XPath expression produces: 2, 5, 7


    0 讨论(0)
提交回复
热议问题