2017-10-06 2 views
1

J'essaie de comparer deux fichiers XML. Mon exigence est de comparer les anciens et nouveaux fichiers XML et si une différence est là fusionner dans le nouveau fichier XML.Comparer deux fichiers XML et obtenir les différences

L'extrait de code ci-dessous me permet de savoir si les deux fichiers sont égaux ou non.

public static void compare() throws SAXException, IOException, ParserConfigurationException{ 
    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("old.xml")); 
    doc1.normalizeDocument(); 

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

    System.out.println (doc1.isEqualNode(doc2)); 
} 

Mais je veux aussi les différences. S'il vous plaît dites-moi comment je peux obtenir les différences.

J'ai déjà essayé XMLUnit, mais je ne veux pas l'utiliser.

Répondre

0

Vous pouvez utiliser jaxb pour analyser votre fichier XML et créer des objets Java avec la méthode unmarshall et comparer vos objets générés.

Voir ici: How to compare jaxb, object, string to find differences

Vous pouvez également utiliser google diff match-patch api pour comparer vos deux xml sous forme de chaînes et le patch pour créer le nouveau.

https://code.google.com/archive/p/google-diff-match-patch/

Diff demo: https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html Patch Demo: https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_patch.html

sources sont disponibles sur github: https://github.com/GerHobbelt/google-diff-match-patch

+0

Dans mon cas, le xml est en format différent: .... ..., j'ai plusieurs étiquettes comme ceci. –

+0

Y at-il un moyen de java lui-même pour y parvenir. Je ne veux pas utiliser l'api 3ème partie. Ne pouvons-nous pas utiliser DocumentBuilderFactory ?? –

+0

Ne pas réinventer la roue, il n'est pas si facile de faire un diff de deux fichiers. Je pense que c'est votre meilleur choix pour utiliser une api testée et bonne. –