Michael S
Michael S

Reputation: 29

Creating an XML with multiple root elements

I'm trying to create an XML with multiple root elements. I can't change that because that is the way I'm supposed to send the XML to the server. This is the error I get when I try to run the code:

System.InvalidOperationException: This operation would create an incorrectly structured document.

Is there a way to overwrite this error and have it so that it ignores this?

Alright so let me explain this better:

Here is what I have

XmlDocument doc = new XmlDocument();
doc.LoadXml(_application_data);

Now that creates the XML document and I can add a fake root element to it so that it works. However, I need to get rid of that and convert it into a DocumentElement object.

How would I go about doing that?

Upvotes: 0

Views: 6929

Answers (3)

aiodintsov
aiodintsov

Reputation: 2605

just create an XML with single root then get it's content as XML text.

you are talking about XML fragment anyways, since good xml has only one root.

this is sample to help you started:

var xml = new XmlDocument();
var root = xml.CreateElement("root");
root.AppendChild(xml.CreateElement("a"));
root.AppendChild(xml.CreateElement("b"));
Console.WriteLine(root.InnerXml); // outputs "<a /><b />"

Upvotes: 0

Alexei Levenkov
Alexei Levenkov

Reputation: 100527

Specify Fragment when creating XmlWriter as shown here

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.CloseOutput = false;

// Create the XmlWriter object and write some content.
MemoryStream strm = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(strm, settings))
{
    writer.WriteElementString("orderID", "1-456-ab");
    writer.WriteElementString("orderID", "2-36-00a");
    writer.Flush();
}

Upvotes: 4

Jacob
Jacob

Reputation: 78850

If it has multiple root elements, it's not XML. If it resembles XML in other ways, you could place everything under a root element, then when you send the string to the server, you just combine the serialized child elements of this root element, or as @Austin points out, use an inner XML method if available.

Upvotes: 0

Related Questions