在隔离存储中加载XML
本文关键字:加载 XML 存储 隔离 | 更新日期: 2023-09-27 18:05:01
我使用以下代码在独立存储中创建和加载xml。在第一部分中,如果文件不存在,它将在隔离存储中创建该文件,否则它将加载隔离存储文件中已经创建/加载的文件。问题是当它试图加载它在第一次调用函数时(成功)创建/加载的文件时。下面是代码
public void InitAch()
{
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!storage.FileExists("Achievements.xml"))
{
using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
{
XDocument xml = XDocument.Load("Achievements.xml");
xml.Save(stream,SaveOptions.None);
}
}
else
{
using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Open, FileAccess.Read))
{
XDocument xml = XDocument.Load(stream,LoadOptions.None);
Lexis.Page4.Achievements.sheep = Int32.Parse(xml.Root.Element("BlackSheep").Value);
Lexis.Page4.Achievements.singularity = Int32.Parse(xml.Root.Element("Singularity").Value);
Lexis.Page4.Achievements.luke = Int32.Parse(xml.Root.Element("LuckyLuke").Value);
Lexis.Page4.Achievements.gardener = Int32.Parse(xml.Root.Element("Gardener").Value);
Lexis.Page4.Achievements.dumbo = Int32.Parse(xml.Root.Element("Dumbo").Value);
Lexis.Page4.Achievements.joker = Int32.Parse(xml.Root.Element("Joker").Value);
Lexis.Page4.Achievements.maid = Int32.Parse(xml.Root.Element("Maid").Value);
Lexis.Page4.Achievements.mr = Int32.Parse(xml.Root.Element("MrWords").Value);
Lexis.Page4.Achievements.secret = Int32.Parse(xml.Root.Element("Detective").Value);
}
}
}
谢谢你的帮助。
if (!storage.FileExists("Achievements.xml"))
using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
{
XDocument xml = XDocument.Load("Achievements.xml");
xml.Save(stream,SaveOptions.None);
}
在此代码中:
- 第1行:文件不存在
- 第2行:创建一个新的(空)文件
- 第4行:加载(空)文件- 此时文件为空,没有加载任何内容!我猜它抛出是因为它,或者因为它无法将名称解析到本地存储-在任何情况下这一行都是不正确的。
- 第5行:保存(空?)XML文档到文件
您需要修复XML文件的创建。
为什么要创建一个空文件并保存它?这似乎有点……错了。
关于空文件的加载,当然,一旦访问xml.Root.Element("BlackSheep").Value
,就会出现异常失败。
该元素在空文件中不存在,因此Element("BlackSheep")
将返回null。而.Value
属性访问将导致异常。
所以我不确定你需要什么帮助,除了:
- 不要创建空XML,因为没有意义;和/或,
- 在你的read中添加一些代码来测试文件中是否有实际的东西。