2011-01-18 24 views
15

Necesito diferir estructuras de directorios grandes que contengan archivos generados .xml y .wsdl. Los archivos .xml generados difieren en el orden en que aparecen los elementos secundarios. Se supone que el método XmlUnit Diff.similar() maneja este caso:¿Hay alguna alternativa a XmlUnit?

'Dos documentos se consideran' similares 'si contienen los mismos elementos y atributos independientemente del orden.'

Este no es el caso, sin embargo. Tomé un archivo .xml, invirtió el orden de dos elementos secundarios y XmlUnit dice que no son similares.

XmlUnit está roto, proporcionando no más funcionalidad que la utilidad de diferencia integrada.

¿Existe alguna alternativa a XmlUnit que reconozca las diferencias simples en archivos .xml como ordenar elementos secundarios?

+6

Si desea le ayudará a editar su publicación para incluir (a) su código que muestra cómo instanciaste 'Diff' e invocó' Diff.similar() 'y (b) a Ejemplo mínimo de XML que demuestra lo que percibes como el resultado incorrecto. –

Respuesta

1

Acepto el comentario de Jim. La mayoría de los problemas que tuve que enfrentar con XmlUnit se debieron a una inicialización incorrecta.

Sin embargo, siempre puedes echar un vistazo al código fuente XMLUnit y sustituir el controlador Diff por el tuyo si sientes que la implementación no está haciendo lo que necesitas. El código es bastante fácil de entender y podrás controlar completamente el comportamiento sin mucho esfuerzo necesario para implementar tu propio motor de diferencias.

3

descubrí que el establecimiento de la siguiente opción resuelve el problema de similitud inexacta (ONU):

XMLUnit.setIgnoreWhitespace(true); 
+3

Este es uno de los principales problemas que tengo con XMLUnit, la configuración estática que hace que estos se influyan entre sí. Prefiero ver estas llamadas en el objeto Diff. – Somatik

1

Es mejor para ordenar XML, antes de compararlo con XMLUnit, en lugar de utilizar XMLUnit sorting escribir su propio , sería mucho más fácil que configurar xmlunit para sus necesidades

5

Tengo un problema similar, en mi caso, tenía varias etiquetas con el mismo nombre, pero atributos diferentes (el orden no importaba), pero XmlUnit siempre se verifica primero con el primero, segundo con el segundo ... que se puede intercambiar. Mi pregunta era:

Comparing similar xml files with XmlUnit with unordered tags (same tag name with different attributes)

he encontrado una solución aquí:

http://www.infoq.com/articles/xml-unit-test

En mi caso, se resolvió simplemente reemplazando el elemento calificador:

Diff diff = new Diff(controlXml, responseXml); 
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); 
Cuestiones relacionadas