如何在 c# Windows 8 App 中更新现有 XML 文件的元素?

Posted

技术标签:

【中文标题】如何在 c# Windows 8 App 中更新现有 XML 文件的元素?【英文标题】:How can I update an element of an existing XML file in c# Windows 8 App? 【发布时间】:2016-08-15 05:43:57 【问题描述】:

我有一个位于 Assets 文件夹中的 XML 文件。尝试使用 Linq 读取文件时我没有遇到任何问题。但是,当我想写入该文件时,我看不到任何错误,并且目标元素永远不会更新。

我的代码如下:

private static readonly string mealsXMLPath = Path.Combine(Package.Current.InstalledLocation.Path, "Assets/meals.xml");
    private XDocument loadedData;

在构造函数中我有初始化代码:

loadedData = XDocument.Load(mealsXMLPath);

我用来更新现有元素值的实际代码在这里

public async void UpdateQuantity(Dictionary<int, int> orderdetails)
        
            XDocument xmlFile = XDocument.Load(mealsXMLPath);
            foreach(var key in orderdetails.Keys)
            
                XElement upd = (from order in xmlFile.Descendants("Meal")
                                where order.Element("ID").Value == key.ToString()
                                select order).Single();
                upd.Element("Avaibility").Value = (Convert.ToInt32(upd.Element("Avaibility").Value) - orderdetails[key]).ToString();


            
        

我尝试了其他内置方法,例如 xdoc.save("path")xml...Create(..)。但似乎没有一个在 C# Windows 8 应用程序中有效。

【问题讨论】:

InstalledLocation 是只读的...相关:SQLite for Windows Runtime is returning an “ReadOnly” error SQLiteException object 我是 Windows 8 应用程序开发的初学者。您能否提供一个解决方案,使我能够实现我的目标。 你的 xml 可能有一个命名空间,这就是为什么没有更新。 【参考方案1】:

您必须将文档保存到可写目录中:

using (var stream = await (await ApplicationData.Current.LocalFolder.CreateFileAsync(System.IO.Path.GetFileName(mealsXMLPath))).OpenAsync(FileAccessMode.ReadWrite))

    xmlFile.Save(stream.AsStreamForWrite());

【讨论】:

错误,当该文件已存在时无法创建该文件。 (HRESULT 异常:0x800700B7) 我现在做了一个小修改,错误消失了,但xml文件永远不会更新。 使用 (var stream = await (await ApplicationData.Current.LocalFolder.CreateFileAsync(System.IO.Path.GetFileName(mealsXMLPath) , CreationCollisionOption.OpenIfExists)).OpenAsync(FileAccessMode.ReadWrite))跨度>

以上是关于如何在 c# Windows 8 App 中更新现有 XML 文件的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 窗体 C# 中单击按钮通过 DataGridView 更新数据库中的布尔字段

使用 C# 和 XAML 为 Windows 8.1 创建 facebook 应用程序时出现异常

使用 C# 在 Windows 8 Metro App 上发送 POST 请求

如何从我的 Windows Phone 8 应用程序(XAML 和 C#)访问相机并将拍摄的照片保存在确定的文件夹中?

在 Windows,Python3.8 上使用多处理时如何更新 tkinter 应用程序中的状态

如何在 C# 中更新 app.config 连接字符串数据源值?