Merge 2 XMLs based on their attribute value using C# or XSLT


first xml is:

<study stdyname="jyia">   <subject sbjid="001">    <visit visitid="a">     <itemgroup oid="a1" name="gulzar" age="23" />     <itemgroup oid="a2" name="tej" age="32" />        </visit>     <visit visitid="b">      <itemgroup oid="b1" name="ahmed" age="22" />      <itemgroup oid="b2" name="praks" age="42" />         </visit>   </subject>   <subject sbjid="002">    <visit visitid="c">     <itemgroup oid="c1" name="gul" age="13" />     <itemgroup oid="c2" name="te" age="12" />        </visit>    </subject>  </study>


second xml is:

<study stdyname="jyia">   <subject sbjid="001">      <visit visitid="b">      <itemgroup oid="bb1" name="ahme" age="2" />      <itemgroup oid="bb2" name="prak" age="2" />         </visit>   </subject>   <subject sbjid="003">    <visit visitid="d">     <itemgroup oid="d1" name="gull" age="113" />     <itemgroup oid="d2" name="tejj" age="112" />       </visit>    </subject>  </study>

output be:

<study stdyname="jyia">   <subject sbjid="001">    <visit visitid="a">     <itemgroup oid="a1" name="gulzar" age="23" />     <itemgroup oid="a2" name="tej" age="32" />      </visit>    <visit visitid="b">     <itemgroup oid="b1" name="ahmed" age="22" />     <itemgroup oid="b2" name="praks" age="42" />       <itemgroup oid="bb1" name="ahme" age="2" />     <itemgroup oid="bb2" name="prak" age="2" />       </visit>   </subject>   <subject sbjid="002">    <visit visitid="c">     <itemgroup oid="c1" name="gul" age="13" />     <itemgroup oid="c2" name="te" age="12" />       </visit>   </subject>   <subject sbjid="003">    <visit visitid="d">     <itemgroup oid="d1" name="gull" age="113" />     <itemgroup oid="d2" name="tejj" age="112" />       </visit>   </subject>  </study>

i want merge above 2 xmls output shown in output code. please me out..i new c# code, if possible please provide whole code that. plesae guide me if there way round (using xslt)to that.here merging done attribute value.

thanks in advance, appreciated.

try this:

      xmldocument doca = new xmldocument();       doca.load(@"c:\xml\data1.xml");       xmldocument docb = new xmldocument();       docb.load(@"c:\xml\data2.xml");       foreach (xmlnode subjectb in docb.documentelement.childnodes) {         xmlnode subjecta = doca.selectsinglenode("//subject[@sbjid='" + subjectb.attributes["sbjid"].value + "']");         if (subjecta == null) {           xmlnode importedsubject = doca.importnode(subjectb, true);           doca.documentelement.appendchild(importedsubject);         }         else {           xmlnode visitb = subjectb.firstchild;           xmlnode visita = subjecta.selectsinglenode("visit[@visitid='" + visitb.attributes["visitid"].value + "']");           if (visita == null) {             xmlnode importedvisit = doca.importnode(visitb, true);             subjecta.appendchild(importedvisit);           }           else {             foreach (xmlnode itemgroupb in visitb.childnodes) {               xmlnode importeditemgroup = doca.importnode(itemgroupb, true);               visita.appendchild(importeditemgroup);             }           }         }       }       doca.save(@"c:\xml\merged.xml");



Visual Studio Languages  ,  .NET Framework  >  Visual C#



Comments

Popular posts from this blog

Azure DocumentDB Owner resource does not exist

job syspolicy_purge_history job fail in sqlserver 2008

Trying to register with public marketplace error with 'Get-AzureStackStampInformation'