使用net remoting开发了分布式应用,该应用需要使用配置文件app.config来配置连接以及remoting的配置信息等等。现在想开发一个配置文件管理器,以便于用户在不懂xml配置文件的情况下使用该管理器就可以方便的修改配置信息。请问这个管理器该使用什么方式来读写app.config文件呢?是DOM,还是configuration?请指点一下。谢谢

解决方案 »

  1.   

    app.config方式的配置文件,不用管DOM就完全可以使用,因为.Net封装了一些类专用于配置文件的读写
    所有的细节都隐藏了ConfigurationManager.AppSettings属性直接返回配置文件所有的键值对打开应用程序的配置文件:
    Configuration config=ConfigurationManager.OpenExeConfiguration()(XX.exe.config)添加新键值对:config.AppSettings.Settings.Add(newKey, newValue);MSDN上看下相关类
      

  2.   

    你可以用DataTable读取xml文件的信息如dt.ReadXml,如果要编辑就可以用XMLDocument 加载一个XML文档然后在对xml的InnerText进行修改最后用Save方法保存就可以了,用xml做配置文件还是很方便的,不过格式一定要符合xml文档的规范
      

  3.   

    这个configuration我看了,好像仅仅是APPsettings和connection可以处理
      

  4.   

    我想做的事给用户一个界面,左侧一个treeview树状显示配置文件,当选中指定节点时,右侧一个属性栏,供用户修改里面的值。
    现在加载xml到treeview不是问题,可是选中一个节点时,如何获取他的xmlNode?获取了xmlNode才可以列出其属性值不是吗?
    再就是,即便列出了,修改后如何写入XDoc里呢?
      

  5.   

    首先 获取选中只需要通过treeview对象的一个SelectedNode属性就可以啦。
    既然获取节点之后,修改其节点的属性或节点值,肯定是对XmlNode进行的,通过它的setAttribute或InnerText等,保存的话,只需要知道XmlDocument对象通过他的Save方法就可以,你加载Xml应该是用XmlDocument的吧,这个类很好用的,XmlNode其实有一个属性OwnerDocument也可以获取,然后调用Save方法就行了。(路径要作为参数传进去),其实Xml一旦加载到内存,XmlNode的所有操作都是针对内存中的文档流进行的,一旦保存就会将文档流写到你指定的路径下。
      

  6.   

    是这样的,选中Treeview的节点,可以得到TreeNode的Text等信息,但却不是xmlNode对象,只不过是文本信息罢了,如何根据这节点的文本信息获得实际的xmlNode呢?
      

  7.   

    DotNetBar这个工具软件里有一个Treeview的升级树控件能够实现你想要的功能,我们开发的一个项目就是用的这个控件
      

  8.   

    我觉得你可以自定义个类UserNode让他继承TreeNode,放入TreeView中的都是你构建的UserNode对象,然后将UserNode扩展一个XmlNode节点的功能,最简单的就是XmlNode对象作为成员变量放到UserNode中,这样的话,你的问题都可以解决了。一句话,就是将UserNode 和 XmlNode进行一一合成。
      

  9.   

    哦,我想合成的方法可能会比较困难了些。我呢是通过treenode的tag记录一个值,比如根节点为R0一级第一个子节点定为R0C0,一级第一个节点的子节点为R0C0C0,这样在选中treenode时,我可以通过这个tag的值用"C"split到一个数组sNode,再如下处理:
    xNode = XDoc.DocumentElement;
                for (int i = 1; i < sNodes.Length; i++)
                {
                    xNode = xNode.ChildNodes[Convert.ToInt16(sNodes[i])];
                }
    不过这种办法还是一级一级的定位节点的方式,我觉得有点复杂,那xmlnode是不是只有这一种方式呢?
      

  10.   

    这种方法是把xmlNode作为UserNode的一个成员,但是似乎还是无法得知点击了节点到底该定位到xmlDoc里面的哪个位置吧?因为目的是要修改并且要保存的,问题的关键是定位问题。
      

  11.   

    能够知道,因为XmlNode这个对象就有方法能够获得,当前节点的父节点对象,子节点对象,同级的相邻前节点和后节点对象,这些信息难道还不够你确定位置吗?XmlNode这个节点不仅仅是一个节点对象,它还有保存了XML中的树形结构关系在里面。。还有 你可以对XmlDocument的GetElementByID或者GetElementByName方式来获得你要的节点啊,不知道我理解的对不对方便的话 可以把你的需求描述详细一点。
      

  12.   

    我的意思是,给用户一个treeview显示xmlDoc的结构,因此用户也只能点击Treeview控件的节点。现在的问题就是解决Treeview的节点和xmlNode的对应问题。当然我是用的从根节点逐级通过索引的方式定位到用户点击的Treenode对应的xmlNode的。不过觉得这个方法有些麻烦,当然之前想过GetElementByID和GetElementByName,但这两个方法好像返回的是nodelist对象类型。所以改了想法,采用索引定位法。不过这种方法也不好,如果节点增加或删除后,保存到xmlDoc离职后要重新加载的不然索引值就不对了。不过您说的合成的办法我有些不太明白,当然隐隐还是觉得或真是解决方法。只是未实施,主要是也没太理解透彻。
      

  13.   

    对不起,我还是有个问题没有弄明白,就是你为什么非要【从根节点逐级通过索引的方式定位到用户点击的Treenode对应的xmlNode的。】这样做,用户在Treeview中点击选中的节点通过SelectedNode就能获得,既然获得了UserNode这个对象,那么他所对应的XmlNode不直接就能引用了吗?因为XmlNode是UserNode的成员变量啊。而且你对Treeview中的节点进行增加或删除时,肯定也要及时对加载到内存中的xmlDoc结构进行相应的操作(通过xmlNode进行修改),至于你及时保存,还是在程序退出时保存,你可以自己决定啊。
      

  14.   

    过年过得好久没有上来看了,不好意思才看到。我想你上面所说的是通过自定义UserNode类来实现的吧。我还没有实现这个类呢,所以目前用的只能是通过Treeview的Node的tag值这一线索逐层便利的方式定位到的。我知道这个方法是比较笨的,当然对于你说的实现自定义treenode这个对于我来说稍难了些。我还没有考虑好怎么弄好。下一步就准备搞一搞这自定义的treenode。
    前些时候弄带三种状态的Box的treeview控件时,就是因为没有想好怎么对这个treenode进行扩展因而自定义的这个控件做的还不完美。也就是我想实现添加一个节点时节点是带有Box的,我现在只是用了其他方法后期让他带了box。(带选择框的treeview控件是两种状态的,而且没有级联,所以自己要开发三态treeview)