2011-03-09 13 views
14

Actualmente estoy tratando de usar la biblioteca XMLUnit para comparar dos archivos XML. Uno de ellos, el candidato , es generado por mi código de objetos Java (usando JAXB) y el otro es el referencia (No puedo modificarlo). Básicamente, estoy tratando de demostrar que, dado un archivo XML de referencia, puedo deserializarlo (usando Jaxb y algunas clases propias) y luego serializarlo de nuevo en otro archivo y seguir teniendo el mismo contenido.XMLUnit - La sangría del archivo Xml tiene un impacto en la comparación

La biblioteca parece proporcionar los servicios que necesito, pero cuando el archivo generado no está adecuadamente sangrado (en una versión de "impresión bonita") la comparación falla y no ocurre cuando la sangría está bien. Por ejemplo, cuando se genera el candidato , no hay sangría, el contenido es de una sola línea, si se sangra correctamente (manualmente) la comparación es correcta.

Aquí es el mensaje de error generado por XMLUnit:

[diferentes] número esperado de niño nodos '3', pero fue '1'

¿Ustedes tienen alguna idea para resolver ¿esta? Tal vez la solución es generar una versión de impresión bonita del candidato , en este caso ¿tiene alguna idea de combinarlo con el serializador JAXB?

Por cierto si ahora una mejor solución en Java permite comparar archivos XML voy a estar contento de saber que;)

Gracias de antemano por su ayuda.

Respuesta

19

Puede relajar algunas de las restricciones utilizadas por XMLUnit al comparar árboles al establecer propiedades en la clase org.custommonkey.xmlunit.XMLUnit.

En su caso, es probable que quieren:

XMLUnit.setIgnoreComments(true); 
XMLUnit.setIgnoreWhitespace(true); 
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true); 

También puede encontrar la propiedad setIgnoredAttributeOrder útil también.

+0

¡Muchas gracias! Esto resolvió mi problema. –

0

Para saber cómo hacer esto con XMLUnit 2.x, vea mi respuesta here a una pregunta similar.

Cuestiones relacionadas