簡體   English   中英

在Windows應用商店應用中編輯XML文件

[英]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 ..**
            }



        }




    }
}

我已經有一個如上所述的xml文件:

這可能是正確的方法(沒有在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM