¿Cómo identifica los valores duplicados en una secuencia numérica usando XPath 2.0?

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?

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 :

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

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.

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.

¿Qué hay de xsl? ¿Es aplicable a su solicitud?