我尝试从带有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解决方案。
感谢您的帮助!
答案 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>
它会因多个根元素错误而失败。不同的错误,类似的问题。