我有一个XPath表达式,其提供我像下面的一个值的序列:
1 2 2 3 4 5 5 6 7
这是很容易将其转换为一组唯一值的1 2 3 4 5 6 7
使用distinct-values()
不过,我想提取是重复值的列表= 2 5
。 我想不出一个简单的方法来做到这一点。 任何人都可以帮忙吗?
我有一个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]]
其中$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
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.
计算你的原始设定和设定不同的值之间的差异。 这是一组出现不止一次的数字。 需要注意的是,如果它们发生两次以上的,如果这是必需的原始序列,以便再次转换为一组不同的值在此结果集数字不一定是截然不同的。
什么XSL? 它是适用于你的要求?
<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>