I have source XMLfiles that come in with multiple root elements and there is nothing I can do about it. What would be the best way to load these fragments into an XDocument with a single root node that I can create to have a valid XML document?
Sample:
<product></product>
<product></product>
<product></product>
Should be something like:
<products>
<product></product>
<product></product>
<product></product>
</products>
Thanks!
Here's how to do it with an XmlReader
, which is probably the most flexible and fastest-performing approach:
XmlReaderSettings xrs = new XmlReaderSettings();
xrs.ConformanceLevel = ConformanceLevel.Fragment;
XDocument doc = new XDocument(new XElement("root"));
XElement root = doc.Descendants().First();
using (StreamReader fs = new StreamReader("XmlFile1.xml"))
using (XmlReader xr = XmlReader.Create(fs, xrs))
{
while(xr.Read())
{
if (xr.NodeType == XmlNodeType.Element)
{
root.Add(XElement.Load(xr.ReadSubtree()));
}
}
}
I'll leave you to put it into a string field, but you can basically do this:
myDoc=new XmlDocument();
myDoc.LoadXml("<products>"+myData+"</products>");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With