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,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
106 3
|
2月前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
2月前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
2月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
12 0
|
2月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
19 0
|
1天前
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
|
4天前
|
Java Android开发
常见APP的操作
常见APP的操作
11 0
|
11天前
|
前端开发 Android开发 开发者
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
【4月更文挑战第30天】本文探讨了使用Flutter开发混合应用的方法。混合应用结合Web技术和原生容器,提供快速开发和低成本维护。Flutter,一款现代前端框架,以其插件系统和高性能渲染引擎支持混合应用开发。通过创建Flutter项目、添加平台代码、使用WebView、处理平台间通信以及发布应用,开发者可构建跨平台混合应用。虽然混合应用有性能和用户体验的局限,但Flutter的跨平台兼容性和丰富的插件生态降低了开发成本。开发者应根据项目需求权衡选择。
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
|
1月前
|
移动开发 小程序 前端开发
使用uni-app开发(h5、小程序、app)步骤
使用uni-app开发(h5、小程序、app)步骤