如何将StreamReader转换为XDocument?

时间:2013-03-14 06:43:53

标签: xml windows-phone-7 linq-to-xml streamreader isolatedstorage

我在IsolatedStorage中存储XML数据,同时从IsolatedStorage读取数据。我需要将StreamReader转换为XDocument。 以下代码我已经习惯将StreamReader转换为XDocument。我收到一个错误:“root element is missing”

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>

如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

看看你在做什么:

using (StreamReader reader = new StreamReader(isoFileStream))
{                        
    displayXmlData.Text = reader.ReadToEnd();                       
    XDocument offlineHeadline = XDocument.Load(reader);
}

您正在通过StreamReaderReadToEnd读取所有数据,然后然后您正在尝试将其加载到XDocument。没有更多的数据可供阅读!一些选择:

  • 将其读取为字符串,然后使用该字符串将displayXmlData.Text 分别设置为XDocument.Parse的文档。 (如果WP7不支持,请使用StringReaderXDocument.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);
        ...
    }
}