保存到 XML 文档

4

我正在尝试创建一个Windows Phone 7应用程序,并希望使用以下函数更新/保存xml文件:

        XDocument xmlDoc = XDocument.Load("myApp.xml");

        xmlDoc.Element("ocd").Add(new XElement("vDetails", new XElement("itemName", this.tb_Name.Text),
            new XElement("Date", System.DateTime.Now.ToString()), new XElement("itemValue", "")));

        xmlDoc.Save("data.xml");

然而,xmlDoc.Save一行代码出现错误:最佳重载方法匹配“System.Xml.Linq.XDocument.Save(System.Xml.XmlWriter)”具有一些无效的参数。

我需要做什么来纠正这个问题?

2个回答

8
你需要保存到隔离存储中(或其他几个地方)。获取应用程序的隔离存储,打开文件流,然后保存到文件流中:
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (Stream stream = storage.CreateFile("data.xml"))
    {
        doc.Save(stream);
    }
}

谢谢您。这个例子让我找到了正确的方向...不过我还有一个疑问...当我保存文件时,更新后的文件似乎已经被保存了。但是,如果使用Iso存储,如果“应用程序”关闭了,新更新的.xml文件是否会被保存和恢复?我无法弄清楚如何测试它?有什么建议吗?也许我需要把这个问题提出来。 - webdad3
@Jeff:隔离存储是持久的。你可以把它看作是应用程序自己的私有磁盘。如果应用程序被卸载然后重新安装,我认为它会被清除。 - Jon Skeet
@JonSkeet 你好,你所解释的方法是用于保存XML文件的,但如果我想使用相同的逻辑读取该文件呢?var xml = XDocument.Load("arquivo.xml").ToString(); var content = new StringContent( xml, Encoding.GetEncoding("ISO-8859-1"), "application/xml"); - user3796130
@NathielPaulino:仅调用 XDocument.Load 就可以读取文件。说实话,你想要实现什么并不清楚——而使用 ISO-8859-1 编码也不太可能是正确的选择。看起来你应该提出一个包含更多细节的新问题。 - Jon Skeet
@JonSkeet 我已经尝试过了,但是没有人回答这里 - user3796130

1
Windows Phone 开发者博客深入探讨了应用程序执行模型。
我认为区分应用程序“关闭”和应用程序被置于后台是很重要的。
“应用程序关闭”简单来说是用户按下硬件返回按钮多次,以通过应用程序的各个页面,超过应用程序的第一个页面的方式进行后退的结果。
“应用程序停用”发生在另一个应用程序控制前景时-例如,来电、启动选择器或用户按下Windows键。在这两种情况下,您的应用程序将被停用(而不是关闭)。在我们进入停用事件的微妙之前,让我们确保我们都明白,在停用时,您的应用程序会终止(最终)。很简单;您的代码无法在后台运行,因此您的应用程序会终止。但是,与关闭的应用程序不同,停用的应用程序会被封存。不要混淆,封存的应用程序进程仍然会终止。但与关闭的应用程序将WP操作系统删除应用程序的任何痕迹不同,当应用程序停用时,WP操作系统会存储应用程序状态的记录(墓碑)。基本上,WP操作系统会保留应用程序的墓碑,该墓碑成为手机应用程序后堆栈的一部分,该堆栈是启用硬件返回按钮以增强导航功能的日志。

应用程序执行模型

至于测试,一个想法是重构代码并为各种事件点添加日志记录,例如关闭或被墓碑化等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接