2011-01-18 9 views
15

Potrzebuję rozróżnić duże struktury katalogów zawierające wygenerowane pliki .xml i .wsdl. Wygenerowane pliki .xml różnią się kolejnością elementów potomnych. Metoda XmlUnit Diff.similar() ma obsłużyć tę sprawę:Czy są jakieś alternatywy dla XmlUnit?

"Dwa dokumenty są uważane za" podobne ", jeśli zawierają te same elementy i atrybuty, niezależnie od kolejności."

Tak jednak nie jest. Zrobiłem plik .xml, odwróciłem kolejność dwóch elementów potomnych, a XmlUnit mówi, że nie są podobne.

XmlUnit jest zepsuty, zapewniając więcej funkcji niż wbudowane narzędzie diff.

Czy istnieje alternatywa dla XmlUnit, która rozpoznaje proste różnice w plikach .xml, takich jak porządkowanie elementów potomnych?

+6

Jeśli chcesz pomoc, że będziesz musiał edytować swój wpis, aby dołączyć (a) twój kod pokazujący, w jaki sposób utworzyłeś 'Diff' i wywołałeś' Diff.similar() ', oraz (b) a minimalny przykład XML, który demonstruje to, co postrzegasz jako nieprawidłowe wyjście. –

Odpowiedz

1

Zgadzam się z komentarzem Jima. Większość problemów, z którymi miałem do czynienia w XmlUnit, wynika z nieprawidłowej inicjalizacji.

Jednak zawsze możesz rzucić okiem na kod źródłowy XMLUnit i zastąpić program obsługi różnicowej swoim własnym, jeśli masz wrażenie, że implementacja nie robi tego, czego potrzebujesz. Kod jest dość łatwy do zrozumienia i będziesz w stanie w pełni kontrolować zachowanie bez większego wysiłku, aby zaimplementować własny silnik diff.

3

I okazało się, że ustawienie następującą opcję rozwiązany problem niedokładnego (ONZ) podobieństwo:

XMLUnit.setIgnoreWhitespace(true); 
+3

Jest to jeden z głównych problemów, które mam z XMLUnit, statyczną konfiguracją powodującą, że użytkownicy mają na siebie wpływ. Wolałbym widzieć te wywołania w obiekcie Diff. – Somatik

1

lepiej sortować XML, zanim porównując ją z xmlunit, zamiast korzystania xmlunit sortowania napisać własną rękę , byłoby to znacznie łatwiejsze niż konfigurowanie xmlunita do twoich potrzeb.

5

Mam podobny problem, w moim przypadku miałem kilka tagów o tej samej nazwie, ale różne atrybuty (kolejność nie ma znaczenia), ale XmlUnit zawsze sprawdzane najpierw z pierwszym, drugim z drugim ... które można zamienić. Moje pytanie brzmiało:

Comparing similar xml files with XmlUnit with unordered tags (same tag name with different attributes)

znalazłem rozwiązanie tutaj:

http://www.infoq.com/articles/xml-unit-test

w moim przypadku, to został rozwiązany po prostu przesłanianie elementów kwalifikator:

Diff diff = new Diff(controlXml, responseXml); 
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());