*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:
- <?xml version="1.0" encoding="utf-8" ?>
-
- <Forms xmlns="http://schemas.xxxxxx.dk/forms">
- <Form Name="Bank" Template="Bank" TitleTerm="Bank.Title">
- <Tabs>
- <Tab Name="General" LabelTerm="Banks.Title" Columns="100,*">
- <Sections>
- <Section Name="SectionAll" ShowCaption="false">
- <Controls>
- <Control Name="Bank" Row="0"/>
- <Control Name="Name" Row="1"/>
- </Controls>
- </Section>
- </Sections>
- </Tab>
- </Tabs>
- </Form>
-
- <Form Name="Country" Template="Country" TitleTerm="Countries.Title">
- <Tabs>
- <Tab Name="General" LabelTerm="Country.Title" Columns="100,*">
- <Sections>
- <Section Name="SectionAll" ShowCaption="false">
- <Controls>
- <Control Name="Code" Row="0"/>
- <Control Name="Name" Row="1"/>
- </Controls>
- </Section>
- </Sections>
- </Tab>
- </Tabs>
- </Form>
- </Forms>
og et eksempel på XMLFIL2.XML:
- <?xml version="1.0" encoding="utf-8" ?>
-
- <Forms xmlns="http://schemas.xxxxxx.dk/forms">
- <Form Name="Bank" Template="Bank" TitleTerm="Bank.Title">
- <Tabs>
- <Tab Name="General" LabelTerm="Banks.Title" Columns="100,*">
- <Sections>
- <Section Name="SectionAll" ShowCaption="false">
- <Controls>
- <Control Name="Name" Row="0"/>
- <Control Name="Bank" Row="1"/>
- </Controls>
- </Section>
- </Sections>
- </Tab>
- </Tabs>
- </Form>
- </Forms>
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:
- <?xml version="1.0" encoding="utf-8" ?>
-
- <Forms xmlns="http://schemas.xxxxxx.dk/forms">
- <Form Name="Bank" Template="Bank" TitleTerm="Bank.Title">
- <Tabs>
- <Tab Name="General" LabelTerm="Banks.Title" Columns="100,*">
- <Sections>
- <Section Name="SectionAll" ShowCaption="false">
- <Controls>
- <Control Name="Name" Row="0"/>
- <Control Name="Bank" Row="1"/>
- </Controls>
- </Section>
- </Sections>
- </Tab>
- </Tabs>
- </Form>
-
- <Form Name="Country" Template="Country" TitleTerm="Countries.Title">
- <Tabs>
- <Tab Name="General" LabelTerm="Country.Title" Columns="100,*">
- <Sections>
- <Section Name="SectionAll" ShowCaption="false">
- <Controls>
- <Control Name="Code" Row="0"/>
- <Control Name="Name" Row="1"/>
- </Controls>
- </Section>
- </Sections>
- </Tab>
- </Tabs>
- </Form>
- </Forms>
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