C#操纵XML文档(主要是应用程序的配置文件)

    很想写这么一篇心得,因为我前段时间一直在搞系统的自动更新,不得不跟这个XML文档打交道,在整个的学习过程中,有点收获,这里记下来,算是共享。
    在.net中,操纵XML文档很容易,而且获取一个文档或者一个节点的方法很多,用一句话来形容就是:没有最好的,只有最合适的。所以我们应该掌握更多的方法以适应不同的场合,在这里我总结得肯定不够完善,希望大家多多指点,因为还有些我自己也不是很明白。今天的事例主要是以一个简单的配置文件为例,下面为appstart.exe.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="appStart" type="Microsoft.ApplicationBlocks.ApplicationUpdater.AppStart.ConfigSectionHandler,AppStart" />
  </configSections>
  <appStart>
    <ClientApplicationInfo>
      <appFolderName>C:\Program Files\MyApp\1.0.0.0\bin</appFolderName>
      <appExeName>AppGSGW.exe</appExeName>
      <installedVersion>1.0.0.0</installedVersion>
      <lastUpdated>2004-1-1</lastUpdated>
    </ClientApplicationInfo>
  </appStart>
</configuration>


首先简要说明下配置文件中一些节点代表的含义:ClientApplicationInfo代表一个客户端安装的一些版本信息和应用程序
要执行的一些信息,包括版本号,可执行文件名,安装路径和最后更新日期。

        配置文件是标准的 XML 文件。.NET Framework 定义了一组实现配置设置的元素。一个应用程序配置文件包含应用程序特定的设置。该文件包含公共语言运行库读取的配置设置(如程序集绑定策略、远程处理对象等等),以及应用程序可以读取的设置。


一:怎样获取该配置文档?
        1.
        在VS中获取配置文档有直接提供的方法。首先我们必须知道应用程序配置文件所在的路径,这个对我们理解很有好处,应用程序配置文件的名称和位置取决于应用程序的宿主,如果是可执行文件承载的应用程序,则由可执行文件宿主承载的应用程序的配置文件与该应用程序位于同一目录。配置文件的名称是带有 .config 扩展名的该应用程序的名称。例如,名为 myApp.exe 的应用程序可以与名为 myApp.exe.config 的配置文件关联。 我们可以用如下方式获取该配置文件:
             
            XmlDocument doc = new XmlDocument();
            doc.Load( AppDomain.CurrentDomain.SetupInformation.ConfigurationFile );

        2.
      既然知道了应用程序的路径而且也知道了配置文件的路径方法就多了。
        首先可以直接加载路径,即静态获取,XmlDocument dd = new XmlDocument();     dd.Load("C:\aa\bb\\app.exe.config");
        其次如果要动态获取的话可以这样,string p = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),然后在加载就行了。获取程序集的路径方法多,就不一一例出来了。

二:获取/修改配置文档节点

        如果我们要获取上面的ClientApplicationInfo节点列表,可以用doc.GetElementsByTagName("ClientApplicationInfo");返回的将是一个xmlnodelist对象nodelist,而如果我们要获取<appExeName>节点我们就可以这样,nodelist.SelectSingleNode(@"descendant::appExeName")或者nodelist.SelectSingleNode("ClientApplicationInfo/appExeName"),xmlNodeList和XMLNode有很多方法和属性来对文档进行操作,比如我们要修改appExeName节点的属性,我们可以这样:
            XmlNode node = myDoc.SelectSingleNode("configuration/ClientApplicationInfo/appExeName");
            node.InnerText = “新内容”;
获取它的内容就是相反的操作就行了。

三:保存配置文件
        1.获取配置文件路径(如上面得到的p路径);
        2.调用XmlDocument类的save(p)方法.


总结:在我自己的使用过程中,我就觉得这三种操作最频繁,首先是获取文件,然后就是操作,修改什么的,最后就是保存了。有更好意见的或者我有不全面的地方,请多多指点,共同提高,谢谢。
                                                                    
               
0
0
(请您对文章做出评价)
« 上一篇:(转)SmartClient(智能客户端)学习笔记之——Microsoft Updater Application Block ApplicationUpdater assembly设计
» 下一篇:[转载][翻译]使用asp.net 2.0中的SqlBulkCopy类批量复制数据
posted @ 2007-09-04 10:46 寒蝉 阅读(1808) 评论(3)  编辑 收藏 所属分类: [1].Net开发

  回复  引用    
#1楼2009-08-24 09:56 | Pillar_Yuan[未注册用户]
小弟开始实习不久,好多次查东西都有搜到前辈的文章,并且帮忙解决了大量的问题,非常感谢也很是有感触~以后定向前辈虚心学习乐于助人~
  回复  引用  查看    
#2楼[楼主]2009-08-24 13:03 | 寒蝉      
@Pillar_Yuan
你好,我的一些文章能对你产生作用我感到很荣幸。学习就是一个交流的过程,我一直相信只有通过不断地分享与思考,我们才能进步的更快。
最近我一直忙于项目管理去了,博客都许久没更新了,看样子要开始花点功夫来整理了。

  回复  引用    
#3楼2009-10-29 15:22 | 语祥[未注册用户]
你好,我是新手,想问您一个问题,我想获取手机里拨号连接的用户名,应该怎么做呀?修改XML文件还是用其他的API函数呀??我不太懂,请指导,谢谢