C#中的XmlException:根级别的数据无效

时间:2014-06-01 01:56:43

标签: c# xml windows-runtime linq-to-xml

当应用程序恢复时,我试图在C#WinRt应用程序中读取XML文件:

Windows.Storage.StorageFile File = await Windows.Storage.ApplicationData.Current.TemporaryFolder.GetFileAsync("PreviousSession.xml");
if (File != null)
{
    var File2 = await Windows.Storage.ApplicationData.Current.TemporaryFolder.GetFileAsync("PreviousSession.xml");
    string Document = File2.ToString();
    System.Xml.Linq.XDocument.Parse(Document);
}

但我得到System.Xml.XmlException

Data at the root level is invalid. Line 1, position 1.

如何解决此问题并正确阅读文件?


我的XML文档正在构建如下:

Windows.Data.Xml.Dom.XmlDocument Document = new Windows.Data.Xml.Dom.XmlDocument();
Windows.Data.Xml.Dom.XmlElement Element = (Windows.Data.Xml.Dom.XmlElement)Document.AppendChild(Document.CreateElement("PreviousSessionData"));
...
Windows.Storage.IStorageFile TempFile = await Windows.Storage.ApplicationData.Current.TemporaryFolder.CreateFileAsync("PreviousSession.xml", Windows.Storage.CreationCollisionOption.ReplaceExisting);
await Document.SaveToFileAsync(TempFile);

对于这样的文件:

<PreviousSessionData>...</PreviousSessionData>

1 个答案:

答案 0 :(得分:1)

System.Xml.Linq.XDocument.Parse expects an XML string,而不是XML文件名。

这段代码错了(见评论):

string Document = File2.ToString();          // Return the name of "File2" object, not File2 content!
System.Xml.Linq.XDocument.Parse(Document);   // Parse error, trying to parse the string "PreviousSession.xml" !

你想要的是把文件的内容放在一个字符串中:

string Document = File.ReadAllLines(File2);
System.Xml.Linq.XDocument.Parse(Document); 

或者您可以使用XDocument.Load expects a file path,而不是字符串。