如何使用 XPath 2.0 识别数字序列中的重复值?

发布于 2024-07-07 05:25:08 字数 229 浏览 5 评论 0原文

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

1 2 2 3 4 5 5 6 7

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

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

This is easy to convert to a sequence of unique values 1 2 3 4 5 6 7 using distinct-values(). However, what I want to extract is the list of duplicate values = 2 5. I can't think of an easy way to do this. Can anyone help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如梦亦如幻 2024-07-14 05:25:08

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

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

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

有关其“工作原理”的说明,请参阅

http://dnovaatchev.wordpress.com/2008/11/16/xpath-2-0-gems-find -a-sequence-part-2 中的所有重复值/

TLDR;
这张图可以作为一个直观的解释。

如果序列是:

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

则计算上述 XPath 表达式会产生: 2, 5, 7


在此处输入图像描述

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


enter image description here

自此以后,行同陌路 2024-07-14 05:25:08

说明:

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

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

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.

满地尘埃落定 2024-07-14 05:25:08

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

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.

活雷疯 2024-07-14 05:25:08

那么 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>

What about xslt?
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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文