如何在 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#)访问相机并将拍摄的照片保存在确定的文件夹中?