Metro Style App开发快速入门 之XML文件读取,修改,保存等操作
Posted on 2012-03-13 12:08 work hard work smart 阅读(3274) 评论(5) 编辑 收藏 举报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 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/
欢迎任何形式的转载,未经作者同意,请保留此段声明!