Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a collection of objects representing the diff between two XML texts?

Tags:

c#

diff

xml

What is the best way in C# to get a collection of objects representing the changes between two XML texts, e.g.:

First:

<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>

Second:

<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>

Changes:

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>

The point is to then pass the changes as a collection of objects onto a GUI which can appropriately display them.

What is the best way to go about this, i.e. structure the class(es) that represents the changes and traverse/examine the XML in order to identify the changes most accurately?

like image 905
Edward Tanguay Avatar asked Nov 15 '22 13:11

Edward Tanguay


1 Answers

This appears to be a duplicate question for: Xml Comparison in C#

Have a look there, see if it helps.

Quote:

I've got an answer by Martin Honnen in XML and the .NET Framework MSDN Forum. In short he suggests to use XQuery 1.0's deep-equal function and supplies some C# implementations. Seems to work.

like image 139
Codesleuth Avatar answered Dec 06 '22 13:12

Codesleuth