我在 IsolatedStorage 中存储 XML 数据,同时从 IsolatedStorage 读取数据。我需要将 StreamReader 转换为 XDocument。 以下代码用于将 StreamReader 转换为 XDocument。我收到类似这样的错误:“根元素丢失”
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("AllHeadLine.xml", FileMode.Open);
using (StreamReader reader = new StreamReader(isoFileStream))
{
displayXmlData.Text = reader.ReadToEnd();
XDocument offlineHeadline = XDocument.Load(reader);
}
}
编辑:XML 内容
<category><catname>ರಾಜ್ಯ</catname><img>http://www.udayavani.com/udayavani_cms/gall_content/2013/3/2013_3$thumbimg113_Mar_2013_235853890.jpg</img><heading>ನನ್ನ ಮಗನ ಬಗ್ಗೆ ಹೆಮ್ಮೆ ಇದೆ</heading><navigateurl>some Url </navigateurl></category>
如何解决?
最佳答案
看看你在做什么:
using (StreamReader reader = new StreamReader(isoFileStream))
{
displayXmlData.Text = reader.ReadToEnd();
XDocument offlineHeadline = XDocument.Load(reader);
}
您正在通过 ReadToEnd
从 StreamReader
中读取所有数据,然后您正尝试将其加载到 X文档
。没有更多数据可读!几个选项:
- 将其读取为一个字符串,然后使用该字符串设置
displayXmlData.Text
并解析为带有XDocument.Parse
的文档. (如果 WP7 不支持,请使用StringReader
和XDocument.Load
- 完全摆脱
ReadToEnd
调用,无需设置displayXmlData.Text
。目前尚不清楚这是必需的还是仅用于诊断目的。
除非您真的需要逐字记录文件文本,否则我实际上会完全避免创建 StreamReader
,而是直接从 Stream
加载。这也会让 LINQ to XML 进行编码检测。
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var stream = storage.OpenFile("AllHeadLine.xml", FileMode.Open))
{
XDocument offlineHeadline = XDocument.Load(stream);
...
}
}
关于xml - 如何将 StreamReader 转换为 XDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15402834/