[英]Edit XML file in Windows Store app
我在Windows商店中創建一個應用程序,並在創建的xml文件中寫入xml時遇到問題。 我在Windows應用商店應用中遵循了這個編輯XML文件,但它對我不起作用。
我想在按鈕點擊時在我的xml文件中寫入這個xml。
這個東西的任何替代方式..
<drink>
<drinkImage>ck.png</drinkImage>
<drinkTitle>COKE</drinkTitle>
<drinkDescription>(1793-1844)</drinkDescription>
</drink>
我當前的文件是這樣的:
<?xml version="1.0" encoding="utf-8" ?>
<drinks>
<drink>
<drinkImage>pepsi.png</drinkImage>
<drinkTitle>PEPSI</drinkTitle>
<drinkDescription>(1793-1844)</drinkDescription>
</drink>
**<here I Want above xml on button click>**
</drinks>
這是我嘗試過的:
namespace DrinksApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class coke : Page
{
public coke()
{
this.InitializeComponent();
}
XmlDocument dom = new XmlDocument();
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(softdrinks));
}
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
XDocument xmlDoc = XDocument.Load("favourite//fav.xml");
xmlDoc.Root.Add(new XElement("drink",
new XAttribute("drinkImage","ck.png"),
new XAttribute("drinkTitle","PEPSI"),
new XAttribute("drinkDescription","NONE")
));
xmlDoc.Save(xmlDoc); **//This isn't working in windows store ..**
}
}
}
}
這可能是正確的方法(沒有在Windows商店項目中測試)。 注意添加到哪個父元素的元素以及分配給哪個元素的內部文本,即原始代碼不正確的位置(我很感激努力):
var existingRoot = dom.DocumentElement;
var newElement = dom.CreateElement("drink");
existingRoot.AppendChild(newElement);
var drinkImageElement = dom.CreateElement("drinkImage");
drinkImageElement.InnerText = "ck.png";
newElement.AppendChild(drinkImageElement);
var drinkTitleElement = dom.CreateElement("drinkTitle");
drinkTitleElement.InnerText = "COKE";
newElement.AppendChild(drinkTitleElement);
var drinkDescriptionElement = dom.CreateElement("drinkDescription");
drinkDescriptionElement.InnerText = "Nothing";
newElement.AppendChild(drinkDescriptionElement);
這是一個在線演示(基於控制台的應用程序)的鏈接: https : //dotnetfiddle.net/oElYWJ
輸出:
<drinks>
<drink>
<drinkImage>pepsi.png</drinkImage>
<drinkTitle>PEPSI</drinkTitle>
<drinkDescription>(1793-1844)</drinkDescription>
</drink>
<drink>
<drinkImage>ck.png</drinkImage>
<drinkTitle>COKE</drinkTitle>
<drinkDescription>Nothing</drinkDescription>
</drink>
</drinks>
您無法在此處保存XML文檔。 應用包中的所有文件都是只讀的。 您必須將xml文檔保存到localState:
public async Task DoJobAsync()
{
XDocument xmlDoc = XDocument.Load("favourite//fav.xml");
xmlDoc.Root.Add(new XElement("drink",
new XAttribute("drinkImage", "ck.png"),
new XAttribute("drinkTitle", "PEPSI"),
new XAttribute("drinkDescription", "NONE")
));
using (var stream = await (await ApplicationData.Current.LocalFolder.CreateFileAsync("fav.xml")).OpenAsync(FileAccessMode.ReadWrite))
{
xmlDoc.Save(stream.AsStreamForWrite());
}
}
在控制台應用程序中寫了這個,但它仍然適用於Windows應用商店應用。
XDocument xdoc = XDocument.Load("fa.xml");
xdoc.Root.Add(new XElement("drink",
new XElement("drinkImage", "Img.png"),
new XElement("drinkTitle", "NewDrink"),
new XElement("drinkDescription", "HelloWorld")));
xdoc.Save("fa.xml");
輸出:
<?xml version="1.0" encoding="utf-8"?>
<drinks>
<drink>
<drinkImage>pepsi.png</drinkImage>
<drinkTitle>PEPSI</drinkTitle>
<drinkDescription>(1793-1844)</drinkDescription>
</drink>
<drink>
<drinkImage>Img.png</drinkImage>
<drinkTitle>NewDrink</drinkTitle>
<drinkDescription>HelloWorld</drinkDescription>
</drink>
</drinks>
您的原始代碼非常接近您想要的。 您使用'XAttribute'而不是'XElement'。 這不是問題,但輸出看起來像這樣......
<drink drinkImage="ck.png" drinkTitle="PEPSI" drinkDescription="NONE" />
你的實際問題是保存。 XDoucment.Save接受流,文本編寫器,xml編寫器或字符串。 在這個例子中,我使用了字符串路徑。 在此處查看更多信息: https : //msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v = vs.110).aspx
編輯:嘗試使用文件流:
var xmlFile = await StorageFile.GetFileFromPathAsync("fav.xml");
using (var fileStream = await xmlFile.OpenStreamForWriteAsync())
{
xdoc.Save(fileStream);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.