2012-08-29 21 views
5

Mam dwa pliki XML (XSD), które są generowane przez niektóre narzędzia.
Narzędzie nie zachowuje kolejności elementów, więc mimo że zawartość jest porównywalna, tekst będzie wyświetlany, ponieważ pliki są różne.
Czy istnieje narzędzie, które może posortować elementy przed porównaniem i umożliwi porównywanie tekstów dokumentów? Oczywiście sortowanie musi być wykonywane rekurencyjnie. PrzykłademJak porównać pliki XML

danych:
złożyć:

<xml> 
    <A/> 
    <B/> 
</xml> 

pliku B:

<xml> 
    <B/> 
    <A/> 
</xml> 

Odpowiedz

4

miałem podobny problem, a ja w końcu znaleziono: http://superuser.com/questions/79920/how-can-i-diff-two-xml-files

to stanowisko sugeruje robi porządek kanoniczny xml następnie robi diff. Poniższy powinny pracować dla Ciebie, jeśli jesteś na Linux, Mac, lub jeśli masz okna z czymś Cygwin zainstalowany:

$ xmllint --c14n FileA.xml > 1.xml 
$ xmllint --c14n FileB.xml > 2.xml 
$ diff 1.xml 2.xml 
-1

Próbki XML różnią się zasadniczo. Mimo że treść i hierarchia mogą być identyczne, relacje między rówieśnikami są różne. Podczas analizowania XML jest on przetwarzany w strukturę zwaną DOM, gdzie relacje między jednostkami są bardzo ważne. Jeśli chcesz pominąć naturę relacji między jednostkami rówieśniczymi, prawdopodobnie będziesz potrzebować niestandardowego oprogramowania. Polecam znalezienie prostego narzędzia do porównywania XML opartego na otwartym kodzie źródłowym i dodanie dodatkowych wymagań, których potrzebujesz. Napisałem jeden na http://prettydiff.com/, ale proponuję rozejrzeć się, aby zobaczyć, co jest dostępne przed podjęciem decyzji, ponieważ edytowanie cudzych algorytmów może wymagać trochę ciężkiego podnoszenia.

0

Na co warto, mam stworzył narzędzie Java (lub Kotlin faktycznie) za sprawne i konfigurowalna kanonizacja plików xml.

Będzie zawsze:

  • Sortowanie węzłów i atrybutów według nazwy.
  • Usuń przestrzenie nazw (tak - może - hipotetycznie - być problemem).
  • Prettyprint wynik.

Ponadto można powiedzieć, że do:

  • usunąć daną listę nazw węzłów - może nie chcą wiedzieć, że wartość kawałek metadanych - mówią <RequestReceivedTimestamp> uległ zmianie.
  • Posortuj daną listę kolekcji w kontekście rodzica - być może nie obchodzi cię, że zmieniono kolejność wpisów <Contact> w <ListOfFavourites>.

Używa XSLT i wykonuje wszystkie powyższe funkcje skutecznie przy użyciu łańcuchów.

Ograniczenia

Czyni wsparcie zagnieżdżonych list sortowania - Sortowanie najskrytsze list przed zewnętrzną. Nie można jednak wiarygodnie sortować dowolnych poziomów rekurencyjnie zagnieżdżonych list.

Jeśli masz takie potrzeby, możesz - po skorzystaniu z tego narzędzia - porównać posortowane tablice bajtowe wyników. będą równe, jeśli pozostaną tylko problemy z sortowaniem listy.

gdzie je zdobyć

Można go pobrać tutaj: XMLNormalize