本文介绍了??XML ...>如果字符串开始以&lt解析XML字符串XML文档失败;部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML文件,开始时是这样的:

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>

当我运行下面的code:

When I run following code:

byte[] fileContent = //gets bytes
            string stringContent = Encoding.UTF8.GetString(fileContent);
            XDocument xml = XDocument.Parse(stringContent);

我得到以下XmlException:

I get following XmlException:

在根级别的数据无效。  行1,位置1。

切割出的版本和编码节点解决了这个问题。为什么?如何正确处理这个XML?

Cutting out the version and encoding node fixes the problem. Why? How to process this xml correctly?

推荐答案

如果你只有字节,你既可以加载到字节流:

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);
}

或者你可以在加载XML之前转换成字节的字符串(你知道的编码presuming):

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);

我已经证明我的例子作为.NET 2.0兼容的,如果你使用的是.NET 3.5,你可以使用的XDocument 而不是的XmlDocument

加载字节到流:

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);

这篇关于??XML ...&GT;如果字符串开始以&lt解析XML字符串XML文档失败;部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 05:42