2009-08-21 8 views
5

Czy istnieje prosty sposób porównania dwóch struktur XML w celu ustalenia, czy mają taką samą strukturę i dane?Porównaj dwa XmlNodes w C#

Mam funkcję, która zwraca XmlNode i próbuję napisać testy jednostkowe dla niego. Przechowuję poprawny wynik XML w pliku. Podczas testu wczytuję plik do XmlDocument, znajduję odpowiedni XmlNode i porównuję z wynikiem funkcji. Proste porównanie nie działa (zgodnie z oczekiwaniami) i InnerXml również nie działa. Rozważam usunięcie wszystkich białych znaków z InnerXml i porównanie, lub napisanie własnego porównania, aby przejść drzewo, ale nie lubię żadnej z tych opcji.

+0

Którą wersję .NET używasz? –

Odpowiedz

2

Jeśli trzeba użyć XmlDocument i jej rodzaje wspierających, należy rozważyć użycie Microsoft XmlDiffPatch, który wykonuje konfigurowalne Diff-operacje na XML struktury danych.

7

XNode.DeepEquals. Przeczytaj ostrzeżenia przed użyciem.

+0

Pytanie dotyczy 'XmlDocument' /' XmlNode', a nie LINQ do XML. –

+0

Precyzując, jego pytanie dotyczy porównywania struktur XML. Jego problemem jest jego podejście (za pomocą XmlDocument). Zgadzam się z CodeToGlory: XNode.DeepEquals. –

2

Jak odpowiedział CodeToGlory, XNode.DeepEquals() może pasować do twojego rachunku, sprawdź sekcję uwag na stronie MSDN.

Jeśli utknąłeś z XmlDocument (zamiast XDocument), odpowiedź brzmi: Nie, nie ma prostego (istniejącego sposobu), aby to zrobić. XmlNode nie zastępuje Equals() ani nie zapewnia alternatywy. Ale nie jest niemożliwe pisanie, i ta sama sekcja Uwagi może być wykorzystana jako punkt wyjścia dla algorytmu spaceru drzewnego.

Czy uzyskać jasny obraz swoich wymagań pierwsze, dotyczące atrybutów, komentarzy węzły CDATA itp