zoukankan      html  css  js  c++  java
  • 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'");
    

     参考资料

  • 相关阅读:
    小结:机器学习基础部分
    概率图:HMM:Evaluation问题(前向算法/后向算法)
    概率图:GMM求解:EM优化算法的导出(从【ELBO+KL】和【ELBO+Jensen】两个角度导出)
    概率图:GMM:EM算法及其收敛性证明
    概率图:高斯混合模型(GMM)
    概率图基础:D-separation;全局Markov性质;Markov Blanket
    概率图基础:概率基本概念、条件独立性、图求解联合概率的规则合理性推理
    mysql索引失效
    mysql 统计行数count(*)
    mysql如何收缩表空间
  • 原文地址:https://www.cnblogs.com/linlf03/p/2392278.html
Copyright © 2011-2022 走看看