# [anders geregelt] XML-Dokument vergleichen mit spez. Regeln



## DLor (18. Sep 2007)

Hallo Community!

Ich stehe gerade vor dem Problem 2 XML Dokumente zu vergleichen!
Ich habe 2 Dateien eingelesen, erstelle anschliessend ein Diff-Objekt um diese Dateien auf Unterschiede zu untersuchen. Dies funktioniert nur bei identischer Reihenfolge der Elemente.
Ich kann also nur 2 Ergebnisse erhalten:
- Identisch
- Verschieden

Problemstellung:
- 2 XML-Dokumente
- whitespaces minimieren
- unterschiedliche Reihenfolge, bedeutet trotzdem Gleichheit
- in einer Configdatei o.Ä. sollen Elementtags und Attributnamen festgehalten werden können, die nicht für Ungleichheit sorgen, d.h. trotz Unterschied der Inhalte soll das Ergebnis "GLEICHHEIT" lauten

Hat jemand eine Idee, Anregungen oder sogar Codeschnipsel.
VIELEN DANK


----------



## André Uhres (18. Sep 2007)

Villeicht konvertierst du erstmal die beiden Dokumente in zwei einfache Liste, gemäss deinen Regeln (keine whitespaces, richtige Reihenfolge, keine Tags/Namen aus der Configdatei), ud vergleichst dann die beiden Listen.


----------



## mikachu (18. Sep 2007)

oder du googlest mal nach XMLUnit und nimmst das Tool

#edit 1:
aber da du schon ein Diff hast, und nur zwei vergleiche (ähnlich, verschieden) gehe ich davon aus, dass du schon das XMLUnit besitzt/benutzt.


```
XMLUnit.setIgnoreWhitespace( true ); // ignorieren, aber nich minimieren
XMLUnit.setIgnoreAttributeOrder( true );
```

sollte helfen

btw: was ist mit whitespaces minimieren gemeint?


----------



## DLor (18. Sep 2007)

ich meinte mit minimieren, das mehrere eerzeichen immer zu einem werden.


----------



## DLor (18. Sep 2007)

```
DOMParser dp = new DOMParser();
    	Diff d;
    	try {
			String file = "test.xml";       
            String compare = "test2.xml";       
            
            dp.parse(file);
            Document file_doc = dp.getDocument();
            dp.parse(compare);
            Document compare_doc = dp.getDocument();
            
    		d = new Diff(file_doc, compare_doc);
    		DetailedDiff dd = new DetailedDiff(d);
    		
    		if(dd.identical())
	    	{
	    		System.out.println("Sind Identisch!!");
	    	}
	    	else if(dd.similar())
	    	{
	    		System.out.println("Sind Gleich!!");
	    	}
	    	else
	    	{
	    		System.out.println("error");
	    	}
         }
         catch etc.
```

das ist mein Codebeispiel. Mika.fhdw du scheinst das schoneinmal verwendet zu haben. Ist der Beginn nicht XMLUnit konform?
Das Problem ist, das ich mich 2 Jahre nicht so ganz intensiv mit Java auseinander gesetzt habe.
ich benutze hier Diff und DetailedDiff aus XMLUnit. 
Muss ich hier die DifferenceEngine anfassen, um die Vergleichseigenschaften zu beachten?
Als ergebnis sollte wenn möglich eine Auflistung Datei1: Note A noch dabei. Datei2: Note B gelöscht, Note C geändert.

Vielen Dank


----------



## mikachu (18. Sep 2007)

Uh, so genau hab ich mich auch nicht mit der XMLUnit befasst... ich hatte die auch nur bei einem projekt gebrauch, als ich auch zwei xml-files vergleichen musste.

hab mir dann einfach das Diff-objekt gekrallt und geprüft, ob die beiden dateien ähnlich sind (diff.similar()).

mehr nicht.

und hab auch nur die statischen methoden von XMLUnit benutzt, die ich oben aufführte...

also kann ich dir gar nicht genau sagen, ob du das machen msust, was du gedacht hast machen zu müssen.


----------

