具有隔离存储的Linq To XML - 缺少根元素

时间:2012-05-15 21:56:02

标签: c# .net windows-phone-7 linq-to-xml isolatedstorage

我尝试从带有Linq到XML的独立存储中读取Xml文件。

我的文件包含上面的代码:

<?xml version="1.0" encoding="utf-8"?>
<lense>
   <days>14</days>
   <date>5/29/2012</date>
   <useToday>True</useToday>
   <dateUseToday />
</lense>

我写了一个类似的查询:

using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
   using (IsolatedStorageFileStream isoStream = new  IsolatedStorageFileStream("Lenses.xml", FileMode.Open, store))
   {
      var custs = from c in XElement.Load(isoStream).Elements("Lense")c;
   }
}

但我有以下错误:

  

缺少根元素

我不知道为什么?你能解释一下并帮助我吗?


感谢您的帮助!

但是当我尝试以下代码时,我有相同的根元素错误。

var custs = from c in XDocument.Load(isoStream).Elements("Lense")
            select c;

我使用此代码在隔离存储中查看我的xml文件存储:

using (StreamReader reader = new StreamReader(store.OpenFile("Lenses.xml", FileMode.Open)))
{
    MessageBox.Show(reader.ReadToEnd());
}

xml文件只包含一个元素:

<?xml version="1.0" encoding="utf-8"?>
<lense>
   <days>14</days>
   <date>5/29/2012</date>
   <useToday>True</useToday>
   <dateUseToday />
</lense>

感谢您的帮助!


我知道我可以使用XmlReader操作我的xml文档:

using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("Lenses.xml", FileMode.Open, store))
{
   isoStream.Position = 0;
   XmlReader xmlReader;
   xmlReader = XmlReader.Create(isoStream);
   xmlReader.MoveToContent();
   while (xmlReader.Read())
   {
      switch (xmlReader.NodeType)
      {
         case XmlNodeType.Element:
         {
            if (xmlReader.Name == "date")
            {
               // Code here
            }
         }
      }
   }
}

它有效,但如果可能的话,我更喜欢使用linq到xml解决方案。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

由于您要加载完整的XML文档,请尝试:

XDocument.Load(isoStream)

而不是:

XElement.Load(isoStream)

根据建议,您还需要Elements("lense") lense小写。

请注意,如果您的文件实际包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<lense>
   <days>14</days>
   <date>5/29/2012</date>
   <useToday>True</useToday>
   <dateUseToday />
</lense>
<lense>
   <days>14</days>
   <date>5/29/2012</date>
   <useToday>True</useToday>
   <dateUseToday />
</lense>

它会因多个根元素错误而失败。不同的错误,类似的问题。