Сверка 2-х XML файлов на C#

vippi
Дата: 22.12.2009 09:55:20
Добрый день, уважаемому сообществу.

Нужна проверка мыслей при работе с XML. Ну или ваши Best Practices :-)
Необходимо сверить 2 XML-файла в формате ЦБРФ. Отличия межде ними: во второй файл в каждое определение тэга добавлен префикс 'ed:' и цифровая подпись. Выглядит примерно так:

<ed:PacketEPD EDNo="2" EDDate="2009-11-20" EDAuthor="1234567890" EDQuantity="3" Sum="300" SystemCode="01" xmlns:ed="urn:cbr-ru:ed:v2.0">
	<dsig:SigValue xmlns:dsig="urn:cbr-ru:dsig:v1.1">
		digitalsignature
	</dsig:SigValue>
	<ed:ED101 ...> ... </ed:ED101>
	<ed:ED101 ...> ... </ed:ED101>
	<ed:ED101 ...> ... </ed:ED101>
</ed:PacketEPD>
С XML толком не работал, но представляется мне, что нужно определить класс такого типа:

    class DataClass : IEquatable<DataClass>
    {
        PacketEPDType PacketEPD;
        List<ED101> ED;

        public bool Equals(DataClass other)
        {
            //переопределить метод
        }
    }

Ну и дальше создать 2 объекта, загрузив в них с использованием класса XmlReader данные и сравнить эти объекты.
Беглого просмотра доков хватило чтобы понять, что файлы можно разобрать с помощью XSD схем или преобразовать один в другой с помощью XSLT и сравнить какими-нибудь стандартными средствами. Желания городить огород и реализовывать сравнение руками, если есть какой-то способ это сделать стандартными средствами за пару кликов - конечно нет. Но вот есть ли такие способы?
ZhV
Дата: 22.12.2009 11:32:18
Присоединяюсь к вопросу.

Действительно, кто подскажет идеи - как сравнивать XML-файлы?

Может быть еще более обобщенно.
Например некая "задача" как итог работы анализа чего-то или расчетов - выдает (экспортирует) XML-файлы. Как бы довольно типично - без специальной схемы - просто XML-файл "общего назначения". Более менее регулярная структура - как минимум до нод 1-2 level-a. В разное время, по разным входным условиям - разные файлы.

Как бы их сравнивать - что изменилось "внутри" ? И как представить эти изменения?
Мне кажется, правка предложенная топикстартером - в виде добавления префиксов/суффиксов - не очень здорово - один из обьектов сравнения теряет originality.

1) fullpath - по именам нод? - но не всегда соблюдается уникальность имен на одном уровне ChildNode
2) name+child-index
3) name+attributes
4) ?
ZhV
Дата: 22.12.2009 12:44:43
Свой вопрос снимаю.

Все таки пришло в голову спросить и гугля.

Вроде бы не все так просто - на этом вопросе даже деньги берут
http://www.softkey.info/reviews/review5696.php


Но ... нашел бесплатный, очень наглядный и мне понравивишийся вариант у ... майкрософта
http://soft.oszone.net/program/2551/Microsoft_XML_Notepad/

Может не я один не знал о ее существовании.

Там все идеи по реализации сравнения XML-файлов четко видны - очень удобно разделение представления аттрибутов и данных. Да и вообще утилитка очень полезная.
vippi
Дата: 22.12.2009 12:52:38
ZhV,

На самом деле есть готовое бесплатное решение:

[url=]http://www.microsoft.com/downloads/details.aspx?FamilyID=3471df57-0c08-46b4-894d-f569aa7f7892&DisplayLang=en[/url]
Но код, ответственный за сравнение находится в dll-ках.

Собственно интересует, в какую сторону копать для файлов с известной структурой и наличествующими XSD схемами.
ZhV
Дата: 22.12.2009 13:08:07
vippi
ZhV,

На самом деле есть готовое бесплатное решение:

***
Но код, ответственный за сравнение находится в dll-ках.

Собственно интересует, в какую сторону копать для файлов с известной структурой и наличествующими XSD схемами.


Спасибо. Буду знать.

У меня вопрос попроще... Просто до сих пор я пользовался XML-viewer-ами - без функций сравнения. А тут как-то понадобилось сравнить - вот и вспомнил.

А штатно встроить сравнение XML в свой код... пока без надобности. Но все может быть. Может быть, если поковыряться в компонентах на которые вы указали - что-то выковырять удастся.