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'" );

 参考资料



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/03/13/2392278.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
630 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
722 1
|
17天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
23天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
JavaScript 前端开发 小程序
uniapp一个人开发APP关键步骤和考虑因素
uniapp一个人开发APP关键步骤和考虑因素
138 1
uniapp一个人开发APP关键步骤和考虑因素
|
2月前
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
116 9
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
224 1
|
1月前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
783 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机