Saltar al contenido

La mejor manera de comparar 2 documentos XML en Java

Solución:

Suena como un trabajo para XMLUnit

  • http://www.xmlunit.org/
  • https://github.com/xmlunit

Ejemplo:

public class SomeTest extends XMLTestCase {
  @Test
  public void test() {
    String xml1 = ...
    String xml2 = ...

    XMLUnit.setIgnoreWhitespace(true); // ignore whitespace differences

    // can also compare xml Documents, InputSources, Readers, Diffs
    assertXMLEqual(xml1, xml2);  // assertXMLEquals comes from XMLTestCase
  }
}

Lo siguiente comprobará si los documentos son iguales utilizando bibliotecas JDK estándar.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setCoalescing(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setIgnoringComments(true);
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc1 = db.parse(new File("file1.xml"));
doc1.normalizeDocument();

Document doc2 = db.parse(new File("file2.xml"));
doc2.normalizeDocument();

Assert.assertTrue(doc1.isEqualNode(doc2));

normalize () está ahí para asegurarse de que no haya ciclos (técnicamente no habría ninguno)

Sin embargo, el código anterior requerirá que los espacios en blanco sean los mismos dentro de los elementos, porque lo conserva y lo evalúa. El analizador XML estándar que viene con Java no le permite configurar una función para proporcionar una versión canónica o comprender xml:space si eso va a ser un problema, es posible que necesite un analizador XML de reemplazo, como xerces o usar JDOM.

Xom tiene una utilidad Canonicalizer que convierte sus DOM en una forma regular, que luego puede clasificar y comparar. Por lo tanto, independientemente de las irregularidades en los espacios en blanco o el orden de los atributos, puede obtener comparaciones regulares y predecibles de sus documentos.

Esto funciona especialmente bien en IDE que tienen comparadores de cadenas visuales dedicados, como Eclipse. Obtiene una representación visual de las diferencias semánticas entre los documentos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *