El enfoque correcto depende de dos factores:
(a) ¿Cuánto control desea obtener más de cómo se realiza la comparación? Por ejemplo, ¿necesita controlar si el espacio en blanco es significativo, si se deben ignorar los comentarios, si se deben ignorar los prefijos de espacio de nombres, si se deben ignorar las declaraciones de espacios de nombres redundantes, si se debe ignorar la declaración XML?
(b) ¿qué respuesta quieres? (i) un booleano: igual/diferente, (ii) una lista de diferencias adecuada para que un ser humano la procese, (iii) una lista de diferencias adecuada para que una aplicación la procese.
Las dos técnicas que uso son: (a) convertir ambos archivos a Canonical XML y luego comparar cadenas. Esto da muy poco control y solo da un resultado booleano. (b) compare los dos árboles utilizando la función deep-equal() de XPath 2.0 o la saxon de versión sajona extendida: deep-equal(). La versión sajona brinda más control sobre cómo se realiza la comparación y un informe más detallado de las diferencias encontradas (para la lectura humana, no para el uso de la aplicación).
Si desea escribir código Java, podría implementar su propia lógica de comparación, por ejemplo, podría encontrar una implementación de código abierto de XPath deep-equal y modificarla para cumplir con sus requisitos. Son solo un centenar de líneas de código.
En su caso, probablemente sugeriría el analizador DOM (siempre que sus archivos no sean enormes). Entonces tendría efectivamente sus objetos y podría compararlos campo por campo. –
¿Qué sucederá si hay dos nodos con la misma etiqueta? ¿Cómo van a comparar? –
En realidad, todos los contenidos de abc.xml están presentes en 123.xml. Solo quiero verificar que los elementos con etiquetas en abc.xml estén en 123.xml. –