2012-11-13 17 views
6

mam 2 pliki xml:Jak porównać dwa xml z tej samej przestrzeni nazw, ale różne przedrostki użyciem Java i xmlunit

problemu jest w atrybutach prefiksów.

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


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

te dwa xml są takie same, z tą samą przestrzenią nazw, ale z różnymi prefiksami. Jeśli porównam z xmlunit -> asercja kończy się niepowodzeniem. Jak mogę sobie z tym poradzić?

w przypadku podobnego() lub identycznego() porównania mam błąd:

Oczekiwano nazwy atrybutu „wiadomość: MessageNameString” ale „null”
Oczekiwano nazwy atrybutu „wiadomość: MessageVersion”, ale była „zerowa "
Oczekiwano nazwy atrybutu«zerowe», ale była«mes: MessageNameString null»
Oczekiwany nazwę atrybutu«»ale«mes: MessageVersion»

+0

Czy jesteś w stanie podać rzeczywisty testowany XML? Nawet gdy dodaję atrybuty, "podobne" sprawdzanie mija dla mnie. –

+0

Mogę wysłać to w e-mailu. Są dość duże w przypadku formularzy stackoverflow. –

+0

XML definiuje "identyczność" - powinno być możliwe zdefiniowanie "podobnego" na podstawie definicji XML podobnej. na przykład '' i '' są semantycznie tym samym dokumentem. Używanie "similar()" jest problematyczne, jeśli kolejność dzieci jest ważna (często tak jest). Shucks! – mogsie

Odpowiedz

5

Poniższe testy przechodzi«podobny»czek, ale nie powiedzie się«identyczny» sprawdź:

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()); 
    } 

Od docs xmlunit API:

  • identyczne: zawartość i kolejność węzłów w dokumentach są dokładnie takie same
  • podobny: zawartość węzłów w dokumentach są takie same, ale istnieją drobne różnice np sekwencjonowanie elementów rodzeństwa, wartości prefiksów przestrzeni nazw, użycie domyślnych wartości atrybutów

Używanie "podobnego" czeku powinno dać ci to, czego chcesz.

Edytuj: dodane atrybuty z prefixem, ten sam wynik.

+0

Problem występuje w przedrostkach atrybutów. Poprawiam swój przykład. Dla węzłów działa. –

0
// identical 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true) 
// similar 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false) 
Powiązane problemy