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?

Original source

Related problems