2012-11-13 5 views
6

Ich habe 2 XML-Dateien:Wie zwei xml mit dem gleichen Namensraum zu vergleichen, sondern verschiedene Präfixe mit Java und XMLUnit

Das Problem ist in Attributen Präfixe.

<element xmlns:prefix1="namespace" prefix1:attribute="some value">Some text</element> 


<element xmlns:prefix2="namespace" prefix2:attribute="some value">Some text</element> 

Diese zwei XML sind identisch, mit dem gleichen Namespace, aber mit unterschiedlichen Präfixen. Wenn ich mit xmlunit vergleiche -> Assertion fehlschlägt. Wie kann ich damit umgehen?

bei ähnlichem() oder gleich() Vergleich Ich habe Fehler:

Erwartete Attributnamen 'Nachricht: MessageNameString' aber war 'null'
Erwartete Attributname 'message: Message' aber war ‚null '
Erwartete Attributname 'null' aber war 'mes: MessageNameString'
Erwartete attribute name 'null' aber war 'mes: Message'

+0

Können Sie die tatsächliche XML-Datei bereitstellen, die Sie testen? Auch wenn ich Attribute hinzufüge, geht der "ähnliche" Check für mich durch. –

+0

Ich kann es in E-Mail senden. Sie sind ziemlich riesig für stackoverflow Formen –

+0

XML definiert "Identität" - es sollte möglich sein, ein "ähnlich" basierend auf der XML-Definition von ähnlich zu definieren. z.B. '' und '' sind semantisch dasselbe Dokument. Die Verwendung von "ähnlich()" ist problematisch, wenn die Reihenfolge der Kinder wichtig ist (oft). Scheißt! – mogsie

Antwort

5

der folgende Test übergibt die "ähnliche" Kontrolle aber nicht die "identisch" überprüfen:

String control = "<prefix1:element xmlns:prefix1=\"namespace\" prefix1:attribute=\"x\">Some text</prefix1:element>"; 
    String test = "<prefix2:element xmlns:prefix2=\"namespace\" prefix2:attribute=\"x\">Some text</prefix2:element>"; 
    try 
    { 
     Diff diff = XMLUnit.compareXML(control, test); 
     assertTrue("Similar", diff.similar()); 
     assertTrue("Identical", diff.identical()); 
    } 
    catch (Exception e) 
    { 
     fail(e.getMessage()); 
    } 

Aus der XMLUnit API-Dokumentation:

  • identisch: der Inhalt und die Reihenfolge der Knoten in den Dokumenten ist genau das gleiche
  • ähnlich: der Inhalt des Knoten in den Dokumenten sind die gleiche, Kleinere Unterschiede bestehen jedoch z Reihenfolge der Geschwisterelemente, Werte der Namespacepräfixe, Verwendung der implizierten Attributwerte

Die Verwendung der "ähnlichen" Prüfung sollte Ihnen also geben, was Sie wollen.

Bearbeiten: Präfix Attribute hinzugefügt, das gleiche Ergebnis.

+0

Das Problem liegt in Attributpräfixen. Ich korrigiere mein Beispiel. Für Knoten funktioniert es. –

0
// identical 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true) 
// similar 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false) 
Verwandte Themen