Search code examples
c#xmllinqlinq-to-xmlxelement

insert xml string to xml element using LINQ


i want combine two xml that one of them is template and other is data, how can i do this?

XML one:

<magazine>
  <content>
    <page no="1"></page>
    <page no="2"></page>
    <page no="3"></page>
  </content>
</magazine>

XML two:

<data>
  <page no="1">data1</Page>
  <page no="2">data2</Page>
  <page no="3">data3</Page>
</data>

Solution

  • Linq solution:

    var content = XDocument.Load("content.xml")
                           .Root.Elements("page")
                           .ToDictionary(p => (int)p.Attribute("no"));
    
    var xdoc = XDocument.Load("template.xml");
    
    foreach (var page in xdoc.Descendants("page"))
    {
        XElement data;
        if (!content.TryGetValue((int)page.Attribute("no"), out data))
            continue;
    
        page.ReplaceNodes(data.Nodes());
    }