# Diff - Compare 2 xml



## hesk (4. Mai 2011)

Hello!

I use the Class Diff to compare two Xml-Files.
Everything works perfect.

But it is possible to set an child-node which gets ignored?

The first xml has 33 nodes.
The second xml has 34 nodes.

I want to set the name of the node somewhere so it get ignored and diff.similar returns true.

Thx


----------



## Anime-Otaku (4. Mai 2011)

Warum hast du die Frage auf Englisch gestellt? Wie ich in deinen anderen Beiträgen gesehen habe bist du des deutschen mächtig. Außer du bist nicht du oder hast die Frage nur irgendwo herkopiert?

Btw. von welcher Diff Klasse redest du? Mir ist keine Diff-Klasse aus der Standard Java-API bekannt.


----------



## HonniCilest (4. Mai 2011)

I don't know the Class Diff, but maybe you should search for another keywords/methods.

Think about it, if you have two strings and one of these has more characters than the other one, what would you do? Right, the keywords I mean are e.g. contains or beginnswith.

Good luck furthermore!


----------



## hesk (4. Mai 2011)

Sorry, weiß nicht warum ich auf english geschrieben habe. Hatte gerade englische Artikeln gelesen

Hier die Klasse die ich meinte :http://xmlunit.sourceforge.net/

Das Framework heißt scheinbar XmlUnit


----------



## HonniCilest (4. Mai 2011)

Ok, ich habe mir die Docs mal grob angesehen und spontan würde ich so versuchen:

A) Die Klasse DetailedDiff (erbt von Diff) statt Diff verwenden und mit der Methode getAllDifferences(), welche ein List Objekt zurückgibt, auswerten.

B) Das Event differenceFound überschreiben. Das Event besitzt einen Parameter des Typs "Difference", welcher ausgewertet werden kann.



Direkt eine Möglichkeit zum Ignorieren sehen ich hier nicht, ich denke du bist gezwungen eine eigene Auswertung zu betreiben...


----------



## Thomas Darimont (4. Mai 2011)

Hallo,

schau mal hier:

```
package de.tutorials;

import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.DifferenceConstants;
import org.custommonkey.xmlunit.DifferenceListener;
import org.custommonkey.xmlunit.XMLUnit;
import org.w3c.dom.Node;

public class XmlDiffExample {

  public static void main(String[] args) throws Exception{

    String xmlA = "<root><elements><e/><e/><e/><e/></elements></root>";
    String xmlB = "<root><elements><e/><e/><bubu/><e/><e/></elements></root>";
    
    final DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(xmlA, xmlB));
    diff.overrideDifferenceListener(new DifferenceListener() {
      
      @Override
      public void skippedComparison(Node control, Node test) {
        
      }
      
    
      @Override
      public int differenceFound(Difference difference) {
        if(difference.getId() == DifferenceConstants.CHILD_NODELIST_LENGTH_ID
           && difference.getControlNodeDetail().getNode().getNodeName().equals("elements") ){
          return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR;
        }else if(difference.isRecoverable()){
          return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR;
        }else if(difference.getTestNodeDetail().getNode().getNodeName().equals("bubu")){
          return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR; 
        }
        return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
      }
    });
    
    
    //System.out.println(diff);
    
    System.out.println(diff.identical());
    
    System.out.println(diff.similar());
    
    
  }

}
```

Gruß Tom


----------

