JUnit Test si el documento XML está ordenada en la columna arbitraria
Pregunta
Dado un documento XML como
<root>
<row>
<a>2</a>
<b>1</b>
<c>8</c>
</row>
<row>
<b>5</b>
<a>2</a>
<c>8</c>
</row>
<row>
<a>2</a>
<c>8</c>
<b>6</b>
</row>
</root>
¿Hay una manera fácil de afirmar que el documento XML se ordena el elemento B en XMLUnit
Editar: Tengo un extraño problema con una pieza de software que no puedo cambiar, donde el valor de las etiquetas XML en cualquier necesidad de nodo dado para estar en un orden específico. Me gustaría que para mi instrumento de prueba para hacer cumplir este conjunto de reglas antes de cualquier otra validación.
Solución
Usar el valor de la siguiente expresión simple XPath 1.0 :
not(//b[. > following::b])
Otros consejos
Se puede construir una afirmación en torno a una selección de XPath.
Probablemente, la forma más sencilla sería utilizar la /root/row/b
expresión XPath, solicitar el tipo de resultado NODESET
, luego copia el texto de cada nodo de resultado en una estructura List
. Se puede afirmar que el texto en esa lista es igual a una lista de "espera" creado con el método Arrays.asList()
(estoy asumiendo que usted está utilizando Java).
Si se puede ejecutar XQuery, entonces la afirmación de XQuery:
every $i in (1 to count ($x/row) - 1)
satisfies
let $j := $i + 1
return number($x/row[$i]/b) <= number($x/row[$j]/b)
donde $ es el documento, es x cierto si las filas están en orden ascendente de b, falso en caso contrario