Parsing xml string to an xml document fails if the string begins with <?xml... ?> section
.net, c#, xml
Solution
If you only have bytes you could either load the bytes into a stream:
XmlDocument oXML;
using (MemoryStream oStream = new MemoryStream(oBytes))
{
oXML = new XmlDocument();
oXML.Load(oStream);
}
Or you could convert the bytes into a string (presuming that you know the encoding) before loading the XML:
string sXml;
XmlDocument oXml;
sXml = Encoding.UTF8.GetString(oBytes);
oXml = new XmlDocument();
oXml.LoadXml(sXml);
I've shown my example as .NET 2.0 compatible, if you're using .NET 3.5 you can use `XDocument` instead of `XmlDocument`.
Load the bytes into a stream:
XDocument oXML;
using (MemoryStream oStream = new MemoryStream(oBytes))
using (XmlTextReader oReader = new XmlTextReader(oStream))
{
oXML = XDocument.Load(oReader);
}
Convert the bytes into a string:
string sXml;
XDocument oXml;
sXml = Encoding.UTF8.GetString(oBytes);
oXml = XDocument.Parse(sXml);
Problem
I have an XML file begining like this: ``` <?xml version="1.0" encoding="utf-8"?> <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"> <DataSources> ``` When I run following code: ``` byte[] fileContent = //gets bytes string stringContent = Encoding.UTF8.GetString(fileContent); XDocument xml = XDocument.Parse(stringContent); ``` I get following XmlException: Data at the root level is invalid. Line 1, position 1. Cutting out the version and encoding node fixes the problem. Why? How to process this xml correctly?