xml - ¿Cómo identifica los valores duplicados en una secuencia numérica usando XPath 2.0?
xpath-2.0 (4)
Calcule la diferencia entre su conjunto original y el conjunto de valores distintos. Este es el conjunto de números que ocurren más de una vez. Tenga en cuenta que los números en este conjunto de resultados no son necesariamente distintos si ocurren más de dos veces en la secuencia original, por lo tanto conviértalo de nuevo en un conjunto de valores distintos si es necesario.
Tengo una expresión XPath que me proporciona una secuencia de valores como la siguiente:
1 2 2 3 4 5 5 6 7
Es fácil convertir esto en un conjunto de valores únicos 1 2 3 4 5 6 7
usando distinct-values()
. Sin embargo, lo que quiero extraer es la lista de valores duplicados = 2 5
. No puedo pensar en una manera fácil de hacer esto. ¿Alguien puede ayudar?
Qué pasa:
distinct-values(
for $item in $seq
return if (count($seq[. eq $item]) > 1)
then $item
else ())
Esto itera a través de los elementos en la secuencia y devuelve el elemento si el número de elementos en la secuencia que son iguales a ese elemento es mayor que uno. Luego debe usar distinct-values()
para eliminar los duplicados de esa lista.
¿Qué hay de xsl? ¿Es aplicable a su solicitud?
<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>
Use esta simple expresión XPath 2.0 :
$vSeq[index-of($vSeq,.)[2]]
donde $vSeq
es la secuencia de valores en la que queremos encontrar los duplicados.
Para una explicación de cómo esto "funciona", ver :