Как получить коллекцию объектов, представляющих разницу между двумя XML-текстами? - PullRequest
5 голосов
/ 06 января 2010

Каков наилучший способ в C # получить коллекцию объектов , представляющую изменения между двумя XML-текстами, например ::

Первый:

<Customer>
  <Id>1</Id>
  <FirstName>Angie</FirstName>
  <LastName>Jones</LastName>
  <ZipCode>23434</ZipCode>
  <Contracts>
    <Contract>
        <Id>234</Id>
        <Title>Test Contract 1</Title>
    </Contract>
  </Contracts>
</Customer>

Второе:

<Customer>
  <Id>1</Id>
  <FirstName>Angie</FirstName>
  <MiddleName>S.</MiddleName>
  <LastName>Jones-Smith</LastName>
  <Contracts>
    <Contract>
        <Id>234</Id>
        <Title>Test Contract 1</Title>
    </Contract>
    <Contract>
        <Id>534</Id>
        <Title>Test Contract 2</Title>
    </Contract>
  </Contracts>
</Customer>

Изменения:

Kind:       Node:                  Before     After
--------    ----------             --------   ----------------
Change      Customer/LastName      Jones      Jones-Smith
Addition    Customer/MiddleName               S.
Deletion    Customer/ZipCode
Addition    Customer/Contracts[1]             <Contract>
                                                <Id>534</Id>
                                                <Title>Test Contract 2</Title>
                                              </Contract>

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

Как лучше всего это сделать, то есть структурировать класс (ы), представляющий изменения, и просмотреть / исследовать XML для наиболее точной идентификации изменений?

Ответы [ 3 ]

1 голос
/ 06 января 2010

Похоже, что это дублирующий вопрос для: Сравнение XML в C #

Посмотрите, посмотрите, поможет ли это.

Цитата:

У меня есть ответ Мартина Хоннена в XML и .NET Framework MSDN Forum. Короче он предлагает использовать XQuery Функция глубокого равенства 1.0 и предоставляет некоторые реализации C #. Кажется работа.

0 голосов
/ 06 января 2010

LINQ to XML имеет метод DeepEquals, который, я полагаю, вы можете использовать в этом случае.

Тогда, возможно, вы можете использовать процессор XSLT / XQuery под названием SAXON , чтобы получить различия.

0 голосов
/ 06 января 2010

Для этой работы я использовал XMLDiff patch , предоставленный MSFT.Он создает diffgram , который вы можете затем представить как класс, если хотите.

...