【问题标题】:How can I update an element of an existing XML file in c# Windows 8 App?如何在 c# Windows 8 App 中更新现有 XML 文件的元素?
【发布时间】: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 应用程序中有效。

【问题讨论】:

标签: c# xml linq xaml windows-store-apps


【解决方案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))跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多