nr XmlDocument nie przesłonić zachowanie metody Equals()
tak, to w rzeczywistości tylko wykonującego równości odniesienia - co będzie fail w przykładzie, chyba że dokumenty są rzeczywiście takie same instancji obiektu.
Jeśli chcesz porównać zawartość (atrybuty, elementy, commity, PI, itp.) Dokumentu, musisz sam wdrożyć tę logikę.Ostrzegam: to nie jest trywialne.
W zależności od konkretnego scenariusza, możesz usunąć wszystkie nieistotne spacje z dokumentu (co może być trudne) i porównać wynikowy tekst xml. Nie jest to doskonałe - kończy się niepowodzeniem w przypadku dokumentów, które są semantycznie identyczne, ale różnią się takimi rzeczami jak użycie i zadeklarowanie przestrzeni nazw, czy też niektóre wartości są unikane, kolejność elementów itd. Jak już mówiłem, porównanie XML nie jest banalne.
Należy również jasno określić, co oznacza, że dwa dokumenty XML są "identyczne". Czy zamawianie elementów lub atrybutów ma znaczenie? Czy przypadek (w węzłach tekstowych) ma znaczenie? Czy należy ignorować zbędne sekcje CDATA? Czy liczą się instrukcje przetwarzania? A co z pełnymi kwalifikacjami a częściowo kwalifikowanymi przestrzeniami nazw?
W dowolnej implementacji ogólnego przeznaczenia prawdopodobnie będziesz chciał przekształcić oba dokumenty w pewną formę kanoniczną (np. XML lub inną reprezentację), a następnie porównać kanonizowaną treść.
Narzędzia już istnieją, które wykonują XML różnicowych, jak Microsoft XML Diff/Patch, Możesz być w stanie wykorzystać to w celu identyfikacji różnic pomiędzy dwoma dokumentami. Według mojej wiedzy to narzędzie nie jest rozprowadzane w formie źródłowej ... więc aby użyć go w aplikacji wbudowanej, musisz napisać skrypt (jeśli planujesz go użyć, najpierw sprawdź, czy warunki licencji pozwalają na jego użycie i redystrybucję).
EDIT:Wyjazd @Max Toro's answer jeśli używasz .NET 3.5 SP1, a najwyraźniej nie ma opcji w XLinq, które mogą być pomocne. Miło wiedzieć, że istnieje.
Nie wiedziałem o tym, dziękuję. –
Bardzo ładne. Nie wiedziałem, że to istnieje. Wygląda na to, że obsługuje wiele przypadków, które opisuję. – LBushkin
Nice - oznacza to, że nie musiałem importować biblioteki innej firmy, aby to dla mnie zrobić! –