-1

Hi there i am having troubles finding a solution merging 2 XML codes together.

Could someone please tell me how i can merge my initial Xdocument with INSERT below:

Any help is appreciated! Thank you

INITIAL XDOC:

        XDocument doc = new XDocument(
            new XDeclaration("1.0", "utf-8", "true"),
            new XElement(ns + "Root",
                new XAttribute("xmlns", "http://www.blabla.com"),
                new XElement(ns + "LEVEL1", "A"),
                new XElement(ns + "LEVEL1", "B"),
                new XElement(ns + "LEVEL1",
                    new XElement(ns + "LEVEL2", "A"),
                    new XElement(ns + "LEVEL2", "B"),
                    new XElement(ns + "LEVEL2", "C"),
                    new XElement(ns + "LEVEL2")),

                        <Insert Here>

                new XElement(ns + "LEVEL1", "D")));

INSERT:

       INSERT= new XElement(ns + "LEVEL3",
                   new XElement(ns + "LEVEL4", "A"),
                   new XElement(ns + "LEVEL4", "B"),
                   new XElement(ns + "LEVEL4", "C"),
                   new XElement(ns + "LEVEL4",
                       new XElement(ns + "LEVEL5", "A"),
                       new XElement(ns + "LEVEL5", "B"),
                       new XElement(ns + "LEVEL5", "C"),
                       new XElement(ns + "LEVEL5", "D")),
                   new XElement(ns + "LEVEL4", "E"));

Desired output:

 XDocument doc = new XDocument(
        new XDeclaration("1.0", "utf-8", "true"),
        new XElement(ns + "Root",
            new XAttribute("xmlns", "http://www.blabla.com"),
            new XElement(ns + "LEVEL1", "A"),
            new XElement(ns + "LEVEL1", "B"),
            new XElement(ns + "LEVEL1",
                new XElement(ns + "LEVEL2", "A"),
                new XElement(ns + "LEVEL2", "B"),
                new XElement(ns + "LEVEL2", "C"),
                new XElement(ns + "LEVEL2"
                    new XElement(ns + "LEVEL3",
                        new XElement(ns + "LEVEL4", "A"),
                        new XElement(ns + "LEVEL4", "B"),
                        new XElement(ns + "LEVEL4", "C"),
                        new XElement(ns + "LEVEL4",
                            new XElement(ns + "LEVEL5", "A"),
                            new XElement(ns + "LEVEL5", "B"),
                            new XElement(ns + "LEVEL5", "C"),
                            new XElement(ns + "LEVEL5", "D")),
                        new XElement(ns + "LEVEL4", "E"))
            new XElement(ns + "LEVEL1", "D"))));

1 Answers1

0

If you just want to append to the last instance of the element named "LEVEL2" you could use the code:

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "true"),
new XElement(ns + "Root",
    new XAttribute("xmlns", ns),
    new XElement(ns + "LEVEL1", "A"),
    new XElement(ns + "LEVEL1", "B"),
    new XElement(ns + "LEVEL1",
        new XElement(ns + "LEVEL2", "A"),
        new XElement(ns + "LEVEL2", "B"),
        new XElement(ns + "LEVEL2", "C"),
        new XElement(ns + "LEVEL2")),                    

    new XElement(ns + "LEVEL1", "D")));

XElement childElement = new XElement(ns + "LEVEL3",
new XElement(ns + "LEVEL4", "A"),
new XElement(ns + "LEVEL4", "B"),
new XElement(ns + "LEVEL4", "C"),
new XElement(ns + "LEVEL4",
    new XElement(ns + "LEVEL5", "A"),
    new XElement(ns + "LEVEL5", "B"),
    new XElement(ns + "LEVEL5", "C"),
    new XElement(ns + "LEVEL5", "D")),
new XElement(ns + "LEVEL4", "E"));

XElement level2Node = doc.Descendants(ns+"LEVEL2").Last();
level2Node.Add(childElement);
Ehz
  • 2,027
  • 1
  • 12
  • 11