我正在Windows商店中创建一个应用程序,并且在创建的xml文件中编写xml时遇到问题。 我已经按照 Editing XML file in Windows Store App 进行了操作,但它对我没用。
我希望在点击按钮时在我的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 ..**
}
}
}
}
答案 0 :(得分:4)
这可能是正确的方法(没有在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>
答案 1 :(得分:3)
您无法在此处保存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());
}
}
答案 2 :(得分:2)
在控制台应用程序中写了这个,但它仍应适用于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>
您的原始代码非常接近您想要的。您使用了&#39; XAttribute&#39;而不是&#39; XElement&#39;。这不是一个问题,但输出看起来像这样......
<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);
}