Модуль, тестирующий мой код сериализации. Я обнаружил, что один из них не сработал, потому что у меня были атрибуты, перечисленные в другом порядке (я просто сравниваю значения XDocument.ToString()), и хотя я мог это исправить, для меня это действительно не имеет значения в каком порядке появляются элементы или атрибуты, пока они все там с правильным именем на правильном уровне иерархии. Вероятно, я мог бы написать метод, но мне интересно, есть ли простой способ, который я не знаю.
Есть ли простой способ сравнения, если 2 XDocuments равны, игнорируя порядок элементов/атрибутов?
Ответ 1
XNode имеет функцию DeepEquals, которая должна делать трюк.
http://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.deepequals.aspx
Обновление:
Похоже, что функция DeepEquals не всегда работает правильно. Возможно, вам лучше реализовать свою собственную процедуру сравнения.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=400469
Ответ 2
В дополнение к "Адам Рут" я прочитал ссылку на Microsoft и этот пост в блоге очень полезен.
Эрик Уайт: http://blogs.msdn.com/b/ericwhite/archive/2009/01/28/equality-semantics-of-linq-to-xml-trees.aspx
Ответ 3
Попробуйте утилиту Microsoft XML Diff и patch здесь или google "Xml Diff"