2

我在IsolatedStorage中存储XML数据,同时从IsolatedStorage中读取数据。我需要将StreamReader转换为XDocument。 以下代码我用于将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> 

如何解决这个问题?

+1

什么是xml lo好吗? – 2013-03-14 06:45:21

+0

我正在获取XML数据,我需要将StreamReader转换为XDocument。@ Jens Kloster – tilak 2013-03-14 06:48:32

回答

9

看你在做什么:

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

您要通过ReadToEnd读取所有数据移出StreamReader的那么你试图将其加载到一个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); 
     ... 
    } 
} 
+0

非常感谢您... – tilak 2013-03-14 06:54:41