Существует ли команда .NET XPath 'diff' для двух XmlDocuments? - PullRequest
3 голосов
/ 15 февраля 2010

У меня есть созданный мной обработчик каталога, который обновляет себя, оценивая файл манифеста на основе xml для текущего состояния и сравнивая его с локальным manifest.xml.

В настоящее время я обрабатываю каждый узел, чтобы найти разницу в некоторых атрибутах, чтобы определить, требуется ли обновление. Я перебираю все узлы в дереве.

Мне было интересно, был ли более оптимизированный XPath или аналогичный способ сделать 'diff' на 2 XmlDocuments и вернуть все разные узлы, чтобы я мог их обработать.

Это приложение .NET 2.0 C #.

Спасибо

John

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Я использовал Xml Diff Patch в прошлом, посмотрите: http://msdn.microsoft.com/en-us/library/aa302294.aspx

0 голосов
/ 15 февраля 2010

Дополнительной помощи, которую вы собираетесь получить от XPath, нет. Чтобы добиться такого рода вещей, я бы помог приложению для редактирования. Я создал системы, в которых я добавил к узлу атрибут, указывающий, был ли он обновлен , добавлен или удален . Затем я каскадно поднимаю дерево, чтобы каждый предок был помечен как грязный (если он не помечен как одно из этих других состояний).

Чтобы опубликовать изменения, XML обрабатывается с помощью XSL, выбирая все узлы с любым таким состоянием. Узлу dirty будут скопированы его атрибуты, но будут выбраны только дочерние элементы с состоянием. В конечном итоге вы получаете XML, который содержит только измененные элементы, а состояние указывает, какое изменение необходимо применить. Если требуется управление параллелизмом, я предпочитаю использовать атрибут номера версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...