Сравните два XmlNode в C # - PullRequest
       17

Сравните два XmlNode в C #

5 голосов
/ 21 августа 2009

Есть ли простой способ сравнить две структуры XML, чтобы определить, имеют ли они одинаковую структуру и данные?

У меня есть функция, которая возвращает XmlNode, и я пытаюсь написать для нее модульные тесты. Я храню правильный XML-результат в файле. Во время теста я загружаю файл в XmlDocument, нахожу правильный XmlNode и сравниваю с результатом функции. Прямое сравнение не работает (как и ожидалось), и InnerXml также не работает. Я собираюсь удалить все пробелы из InnerXml и сравнить их, или написать собственное сравнение для обхода дерева, но мне не нравится ни один из вариантов.

Ответы [ 3 ]

8 голосов
/ 21 августа 2009

XNode.DeepEquals . Прочитайте предостережения перед использованием.

2 голосов
/ 22 августа 2009

Если вам необходимо использовать XmlDocument и поддерживающие его типы, рассмотрите возможность использования Microsoft XmlDiffPatch , которая выполняет настраиваемые операции сравнения с структурами данных XML.

2 голосов
/ 22 августа 2009

Как ответил CodeToGlory, XNode.DeepEquals () может соответствовать вашему счету, проверьте раздел примечаний на странице MSDN.

Если вы застряли с XmlDocument (вместо XDocument), ответ таков: нет, не существует простого (существующего способа) сделать это. XmlNode не переопределяет Equals () и не предоставляет альтернативы. Но это не невозможно написать, и тот же раздел Замечания можно использовать в качестве отправной точки для алгоритма обхода дерева.

Сначала получите четкое представление о ваших требованиях, касающихся атрибутов, комментариев, узлов CDATA и т. Д.

...