C# HRESULT:0xC00CE556-正在将字符串加载到XML

C# HRESULT:0xC00CE556-正在将字符串加载到XML,c#,xml,windows-runtime,onedrive,C#,Xml,Windows Runtime,Onedrive,我正在尝试加载一个包含从SkyDrive下载的XML的字符串 XmlDocument myXML = new XmlDocument(); myXML.LoadXml(importXMLDocument); 调用上述代码时,我得到以下错误: XmlDocument myXML = new XmlDocument(); myXML.LoadXml(importXMLDocument); 来自HRESULT的异常:0xC00CE556 XmlDocument myXML = new XmlDoc

我正在尝试加载一个包含从SkyDrive下载的XML的字符串

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
调用上述代码时,我得到以下错误:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
来自HRESULT的异常:0xC00CE556

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
这是我试图从字符串转换并加载到XML文档的XML:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);

塔霍
2004
97742
5w-30
6.
0
0
0
0
0
97742
2012-05-04T19:53:53.358-06:00
2012-08-04T19:53:53.358-06:00
100742
假的
假的
3000
3.
真的
真的
真的
2.
马自达3
2011
21504
abcdefg
0w-20
0
0
0
0
0
0
21504
2012-09-14T18:05:02.298-06:00
2013-02-14T18:05:02.298-07:00
26504
假的
假的
64.75
需要新轮胎-500美元+
5000
5.
真的
真的
假的
2.
更新:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
这是我从SkyDrive(使用API)下载XML文件的代码: 昨晚确认,从SKYDrive下载文件时,此过程中添加了一个额外的“?”。下面是执行下载和“LoadXml”调用的整个函数。感谢您的帮助

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
private async void readFileInfo(string folderId)
{
     LiveOperationResult operationResultFile =
     await client.GetAsync(folderId + "/files");

     dynamic resultFile = operationResultFile.Result;
     IDictionary<string, object> fileData = (IDictionary<string, object>)resultFile;
     List<object> files = (List<object>)fileData["data"];

     foreach (object item in files)
     {
          IDictionary<string, object> file = (IDictionary<string, object>)item;

          if (file["name"].ToString() == "ocha.txt")
          {
               LiveDownloadOperationResult DLFile =
               await client.BackgroundDownloadAsync(file["source"].ToString();


                var stream = await DLFile.GetRandomAccessStreamAsync();
                var readStream = stream.GetInputStreamAt(0);


                DataReader reader = new DataReader(readStream);
                uint fileLength = await reader.LoadAsync((uint)stream.Size);


                string content = reader.ReadString(fileLength);


                XmlDocument myXML = new XmlDocument();
                myXML.LoadXml(content.ToString());


                VM.importVehicles(content);


                break;
            }
      }
}
private async void readFileInfo(字符串folderId)
{
LiveOperationResult操作结果文件=
等待client.GetAsync(folderId+“/files”);
动态结果文件=operationResultFile.Result;
IDictionary文件数据=(IDictionary)结果文件;
列表文件=(列表)文件数据[“数据”];
foreach(文件中的对象项)
{
IDictionary文件=(IDictionary)项;
如果(文件[“name”].ToString()=“ocha.txt”)
{
LiveDownloadOperationResult DLFile=
等待client.BackgroundDownloadAsync(文件[“source”].ToString();
var stream=await DLFile.GetRandomAccessStreamAsync();
var readStream=stream.GetInputStreamAt(0);
DataReader=新的DataReader(readStream);
uint fileLength=await reader.LoadAsync((uint)stream.Size);
字符串内容=reader.ReadString(文件长度);
XmlDocument myXML=新的XmlDocument();
LoadXml(content.ToString());
VM.进口车辆(内容);
打破
}
}
}

即使读取本地文件,我也能重现错误。错误的原因是DataReader在内容之前添加了一些额外的字节。在调试器中看不到这些字节,但当将读取的内容放入记事本++中时,例如,您会得到一个额外的问号:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
?<?xml version="1.0" encoding="utf-8"?>
2) 使用StreamReader:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
using (var stream = await file.OpenReadAsync())
{
   using (var readStream = stream.AsStreamForRead())
   {
      using (StreamReader streamReader = new StreamReader(readStream))
      {
         string content = streamReader.ReadToEnd();
         XmlDocument doc = new XmlDocument();
         doc.LoadXml(content);
      }
   }
}
更新:

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
ReadFileInfo方法如下所示,以避免BOM问题。请注意,AsStreamForRead是System.IO中可用的扩展方法(在代码中使用System.IO放置)

XmlDocument myXML = new XmlDocument();
myXML.LoadXml(importXMLDocument);
private异步任务ReadFileInfo(字符串folderId)
{
LiveOperationResult操作结果文件=
等待client.GetAsync(folderId+“/files”);
动态结果文件=operationResultFile.Result;
IDictionary文件数据=(IDictionary)结果文件;
列表文件=(列表)文件数据[“数据”];
foreach(文件中的对象项)
{
IDictionary文件=(IDictionary)项;
如果(文件[“name”].ToString()=“ocha.txt”)
{
LiveDownloadOperationResult DLFile=
等待client.BackgroundDownloadAsync(文件[“source”].ToString());
使用(var stream=await DLFile.GetRandomAccessStreamAsync())
{
使用(var readStream=stream.AsStreamForRead())
{
使用(StreamReader StreamReader=新StreamReader(readStream))
{
string content=streamReader.ReadToEnd();
XmlDocument doc=新的XmlDocument();
doc.LoadXml(内容);
VM.进口车辆(内容);
打破
}
}
}
}
}
}

当我提取硬编码的字符串时,没有发现问题;不知道skydrive是否会引入一些额外的字符(比如字节顺序标记或其他无法察觉的字符),我自己也在想。我可以做些什么来清理我的字符串吗?最有可能的问题是在生成
importXMLDocument
string的其他代码中。考虑将该代码替换为“或”,或者至少验证是否正确处理BOM/EnCODIN。您是否已经通过添加断点并检查其值验证了您的<代码>内容< /代码>是否正是您所期望的那样?确认在下载后,我的字符串中包含一个额外的“?”。我想我可以寻找额外的“?”并尝试在执行LoadXML之前删除它。谢谢您的回答。我昨晚看到了那个额外的“?”并尝试对所有内容进行编码,但无法使其工作。我试图将你的代码与我使用的SkyDrive API代码相匹配,但运气不太好。我使用的“file”变量是IDictionary对象,而不是StorageFile。我注意到stream和readStream变量上有一些异步方法,但我也无法让它们工作。有没有一种方法(更新的问题)来修改你给我的我正在使用的东西?今晚我将尝试一下。这就是答案!谢谢你的帮助。