Merge to XML dokumenter i C#

Tags:    c# xml

*edit*

Jeg har egentlig løst nedenstående problem ved at deserialize og sammenligne objekterne gennem loops. Men hvis nogen har opskriften på nedenstående, er jeg stadig interesseret.

*edit*


Jeg har en lille udfordring som jeg ikke helt kan komme videre med :-(

Jeg har to XML dokumenter. Lad os kalde dem XMLFIL1.XML og XMLFIL2.XML. Strukturen er 100% ens i de to, men data er forskelligt.

Eksempel på XMLFIL1.XML:

Fold kodeboks ind/udXML kode 


og et eksempel på XMLFIL2.XML:

Fold kodeboks ind/udXML kode 


De to XML filer hentes i C# via en XmlReader og deserializes til to objekter af samme klasse.

Problemstillingen er, at jeg vil danne en XMLFIL3.XML som er fællesmængden af XMLFIL1 og XMLFIL2. Men hvis der findes en <Form> node i XMLFIL2.XML med samme "Name" som i XMLFIL1.XML, skal den i XMLFIL3.XML gemme <Form> noden fra XMLFIL2.

Hvis det gør nogen forskel i forhold til løsningen, vil en evt. <Form> node i XMLFIL2.XML ALTID også altid være at finde i XMLFIL1.XML.

Så resultatet i XMLFIL3.XML skal være:

Fold kodeboks ind/udXML kode 


Hvordan vil i gribe det an i C#? Jeg har googlet lidt omkring XSLT, men der er jeg helt blank i forhold til C#.

Jeg har også overvejet at merge de to objekter i stedet for at gøre det på XML niveau. Men gætter på at indgangsvinklen via XML er nemmere?



Indlæg senest redigeret d. 03.08.2012 14:21 af Bruger #9814
6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Tog lige en hurtig tur på google. Har lige kun skimmet noget af følgende:
http://msdn.microsoft.com/en-us/magazine/cc164169.aspx

Men prøv at tage et kig på det :)



Xslt/C# inspiration:
Slet ikke testet, sig til hvis noget skal "fixes" :)

1: kast begge xml filer ind som parametre til xslt
Fold kodeboks ind/udCSharp kode 


2: Check om Form[@Name] eksistere i doc2, ellers udskriv Form
Fold kodeboks ind/udXML kode 



/J



Indlæg senest redigeret d. 06.08.2012 16:25 af Bruger #5789
Tak Martin, det vil jeg kigge på. En hurtig test tilføjer dog alt fra begge filer i den nye fil og kan ikke håndtere at indholdet fra den ene skal overskrive indholdet fra den anden.

Men jeg arbejder videre med det (selvom jeg har fikset det med simple for loops på de deserialiserede objekter.



Jeg har ikke prøvet det, men jeg vil tro, at du kan gøre det samme med Linq, hvor du med den fornuftig IEqualityComparer i Distinct metoden kan fjerne alle dubletter.



Jeg er ikke helt god ven med Linq endnu, men det burde jeg nok snart blive :-)




Xslt/C# inspiration:
Slet ikke testet, sig til hvis noget skal "fixes" :)
/J


Takker for inspirationen. Jeg har smidt det andet i produktion nu, men jeg vil prøve det af i en testapp. så jeg bliver klogere til en anden gang.




t