在隔离存储中加载XML

时间:2011-08-10 17:09:39

标签: c# xml isolatedstorage windows-phone

我正在使用以下代码在隔离存储中创建和加载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);

            }
        }
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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文件的创建。

答案 1 :(得分:0)

为什么要创建一个空文件并保存?这似乎有点......错了。

关于加载空文件,当然,只要您访问xml.Root.Element("BlackSheep").Value,该文件就会失败并出现异常。

该元素不会存在于空文件中,因此Element("BlackSheep")将返回null。虽然.Value属性访问会导致异常。

所以我不确定除了以外需要什么样的帮助:

  1. 不要创建空XML,因为没有意义;和/或,
  2. 在您的阅读中添加一些代码,以测试文件中是否存在任何内容。