2010-01-06 12 views
5

Jaki jest najlepszy sposób w C#, aby uzyskać kolekcję obiektów reprezentujący zmienia między dwoma tekstami XML, np:Jak uzyskać kolekcję obiektów reprezentujących różnice między dwoma tekstami XML?

pierwsze:

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

drugie:

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

Zmiany:

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> 

Chodzi o to, aby następnie przejść w zmianach zbiór obiektów na kolumnę GUI które mogą odpowiednio wyświetlacz im.

Jaki jest najlepszy sposób, aby to zrobić, tj. Strukturę klas (y), która reprezentuje zmiany i przechodzić/badać kod XML w celu najdokładniejszego zidentyfikowania zmian?

+0

Należy również pamiętać o zmianach pozycji - gdyby dodatkowa umowa była w indeksie [0], to należałoby to zidentyfikować jako wstawkę w [0] lub jako zmianę o [0] plus dodatek w [1]. –

Odpowiedz

1

To wydaje się być duplikat pytaniem: Xml Comparison in C#

Sprawdźcie tam, zobaczyć, czy to pomaga.

Cytat:

Mam an answer by Martin Honnen w XML i .NET Framework MSDN Forum. Krótko mówiąc, sugeruje użycie funkcji XQuery 1.0 z dodatkowymi funkcjami C#. Wydaje się, że praca to .

0

Do tego rodzaju pracy użyłem XMLDiff patch dostarczonego przez MSFT. Tworzy on diffgram, który możesz następnie reprezentować jako klasę, jeśli chcesz.

0

LINQ to XML ma metodę DeepEquals, którą według mnie można wykorzystać w tym przypadku.

Następnie możesz użyć procesora XSLT/XQuery o nazwie SAXON, aby uzyskać różnice.

+1

XNode.DeepEquals wydaje zwracać wartość boolean informującą mnie, czy oba teksty XML są równe, czy nie. Czy jest coś podobnego, co daje mi kolekcję różnic? Coś jak "DeepCompare"? –

+0

@Edward Odpowiedź została zaktualizowana, aby zawierała odniesienie do SAXON –

Powiązane problemy