Metro Style App開發快速入門 之XML文件讀取,修改,保存等操作


Metro Style App 之XML文件讀取,修改,保存等操作

采用Win RT的XML API操作XML文件。分別為加載xml文件,選擇xml節點,修改xml節點的屬性,最后保存xml文件。同樣存在着很多異步操作(async,await)。

運行環境請參考上一篇:Metro Style App之文件訪問操作示例

下圖為Metro style app的API。

接下來就講一下具體操作吧:

1、

       StorageFile storageFile = null;
        async void Init()
        {
            //加載xml文件
            XmlDocument doc = await LoadXmlFile(@"Xml\xsltTransform", "xmlcontent.xml");
            //GetXml()獲得Xml文本
            string msg = doc.GetXml();
            //在RichEditBox顯示文本
            myRichEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, msg );

            var xpath = "/library/book/chapter/section/paragraph/@a";
            //選擇節點的值
            var aAttributes = doc.SelectNodes(xpath);
            for (uint i = 0; i < aAttributes.Length; i++)
            {
                //修改節點的屬性
                aAttributes.Item(i).NodeValue = "newValue";
            }
            //保存文件,此時修改和保存文件的路徑是系統的安裝路徑。
            doc.SaveToFileAsync(storageFile);
        }

 加載xml文件的操作為:

當前的路徑為安裝的本地路徑,本示例為bin\debug\Filename\xmlfile

        /// <summary>
        /// Load Xml file
        /// </summary>
        private async Task<XmlDocument> LoadXmlFile(string folder, string file)
        {
            StorageFolder storageFolder = await Package.Current.InstalledLocation.GetFolderAsync(folder);
            storageFile = await  storageFolder.GetFileAsync(file);
            XmlLoadSettings loadSettings = new XmlLoadSettings();
            loadSettings.ProhibitDtd = false;
            loadSettings.ResolveExternals = false;
            return await XmlDocument.LoadFromFileAsync(storageFile, loadSettings);
        }

 注意: loadSettings.ProhibitDtd = false;   loadSettings.ResolveExternals = false; 安全設置都要成false,否則會有異常。 還有Win 8中文件訪問已經發生了一些變化,使用StorageFolder等。

xml文件如下:

<library>
  <book>
    <chapter></chapter>
    <chapter>
      <section>
        <paragraph a="b">1</paragraph>
        <paragraph a="b">2</paragraph>
      </section>
    </chapter>
  </book>
</library>

 

修改后的xml文件:

<library>
  <book>
    <chapter></chapter>
    <chapter>
      <section>
        <paragraph a="newValue">1</paragraph>
        <paragraph a="newValue">2</paragraph>
      </section>
    </chapter>
  </book>
</library>

 

2、修改某個節點的值

var xnodepath = "/library/book/chapter/section/paragraph";
var nodeList = doc.SelectNodes(xnodepath);

for (uint i = 0; i < nodeList.Length; i++)
{
      IXmlNode node = nodeList.Item(i);
      if (node.Attributes[0].NodeValue.ToString() == "one")
      {
             node.FirstChild.NodeValue = "New node Value";
      }
             
}

 上面是修改節點屬性為one的節點值。

 

 總結:Win RT多xml的操作與原來的還是有一些區別的。

下面是我以前總結的XML操作,你會發現他們到底有哪些區別:

下文是對C#對XML的具體操作

如何完成.Net下XML文檔的讀寫操作

C#操作xml SelectNodes,SelectSingleNode總是返回NULL 與 xPath 介紹

C#中用SelectSingleNode方法解析帶有多個命名空間的XML文件

 

以上只是自己的一點學習心得,如果有什么意見和建議,當然自己還在學習研究中。歡迎大家提出,共同學習,一起進步。

 

 

留個問題給大家:

當xml文件增加命名空間屬性時('http://www.microsoft.com'),如何獲得節點的信息;

xml文件如:

<library xmlns='http://www.microsoft.com'>
  <book>
    <chapter></chapter>
    <chapter>
      <section>
        <paragraph a="one">1</paragraph>
        <paragraph a="two">2</paragraph>
      </section>
    </chapter>
  </book>
</library>

如果用doc.SelectNodesNS方法,又該如何使用呢?

 答: 

doc.LoadXml(·"<urlset xmlns='http://www.foo.com'><url xmlns='http://www.bar.com'><loc>http://www.far.com</loc></url></urlset>");
Windows.Foundation.Collections.PropertySet ns = new Windows.Foundation.Collections.PropertySet();
ns.Add("foo", "http://www.foo.com");
ns.Add("bar", "http://www.bar.com");
node = doc.SelectSingleNodeNS("/foo:urlset/bar:url/bar:loc", ns);

或者 

doc.LoadXml(·"<urlset xmlns='http://www.foo.com'><url xmlns='http://www.bar.com'><loc>http://www.far.com</loc></url></urlset>");
node = doc.SelectSingleNodeNS("/foo:urlset/bar:url/bar:loc", "xmlns:foo='http://www.foo.com' xmlns:bar='http://www.bar.com'");

 參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM