2012-05-15 56 views
0

我尝试读取从Linq到XML隔离存储的Xml文件。Linq转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> 

感谢帮帮我 !


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

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 to XML解决方案,如果可能的。

感谢您的帮助!

+4

大写与小写L('“Lense”'''')? – carlosfigueira

+0

如果只是一个案例问题,查询将不返回任何元素,也不会抛出异常。我想你应该尝试从隔离存储中显示你的XML文件的内容,你可能会感到惊讶 –

+0

我今天晚上会测试:) – blasil64

回答

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> 

它将无法与多根元素错误。不同的错误,类似的问题。

+0

与“lense”小写相同的错误... – blasil64