" /> " /> "/>

Adding a root xml element before another root C#

517 Views Asked by At

I have an xml document that follows:

-<Machines>


-<Machine>


-<InstallPath >

<Component "/>

<Component "/>

<Component "/>

<Component "/>

<Component "/>


</InstallPath>

</Machine>
</Machines>

I need to add a root Manifest element before Machines pragmatically using C#.

I tried the following code and I get an error saying that the document is not properly constructed.

Here is the code I am trying:

using (XmlReader reader = cmd.ExecuteXmlReader())
                    {
                        XDocument doc = XDocument.Load(reader);
                        doc.Root.AddBeforeSelf(new XElement("Manifest"));
                        string path = outputPath + "\\" + xmlFileName;

                        doc.Save(path);    
                    }
2

There are 2 best solutions below

2
D Stanley On BEST ANSWER

XML can only have one "root" element. So the structure you're wanting is not valid:

<Manifest>
    ...
</Manifest>
<Machines>
    ...
</Machines>

If you want two sibling elements, they would need to be contained in another parent element.

I want the Manifest element to surround the Machines element and the Machines element to contain the rest of the xml

Then you need to create a new document:

XDocument newDoc = new XDocument(new XElement("Manifest", doc.Root));

This creates a new XDocument with a Manifest root tag, whose content is the root (and contents) of the original document.

0
Ofir Winegarten On

Create a new element with the current Root and put it in a new XDocument:

XDocument newDoc = new XDocument(new XElement("Manifest", doc.Root));