如何编写配置文件管理器 使用net remoting开发了分布式应用,该应用需要使用配置文件app.config来配置连接以及remoting的配置信息等等。现在想开发一个配置文件管理器,以便于用户在不懂xml配置文件的情况下使用该管理器就可以方便的修改配置信息。请问这个管理器该使用什么方式来读写app.config文件呢?是DOM,还是configuration?请指点一下。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 app.config方式的配置文件,不用管DOM就完全可以使用,因为.Net封装了一些类专用于配置文件的读写所有的细节都隐藏了ConfigurationManager.AppSettings属性直接返回配置文件所有的键值对打开应用程序的配置文件:Configuration config=ConfigurationManager.OpenExeConfiguration()(XX.exe.config)添加新键值对:config.AppSettings.Settings.Add(newKey, newValue);MSDN上看下相关类 你可以用DataTable读取xml文件的信息如dt.ReadXml,如果要编辑就可以用XMLDocument 加载一个XML文档然后在对xml的InnerText进行修改最后用Save方法保存就可以了,用xml做配置文件还是很方便的,不过格式一定要符合xml文档的规范 这个configuration我看了,好像仅仅是APPsettings和connection可以处理 我想做的事给用户一个界面,左侧一个treeview树状显示配置文件,当选中指定节点时,右侧一个属性栏,供用户修改里面的值。现在加载xml到treeview不是问题,可是选中一个节点时,如何获取他的xmlNode?获取了xmlNode才可以列出其属性值不是吗?再就是,即便列出了,修改后如何写入XDoc里呢? 首先 获取选中只需要通过treeview对象的一个SelectedNode属性就可以啦。既然获取节点之后,修改其节点的属性或节点值,肯定是对XmlNode进行的,通过它的setAttribute或InnerText等,保存的话,只需要知道XmlDocument对象通过他的Save方法就可以,你加载Xml应该是用XmlDocument的吧,这个类很好用的,XmlNode其实有一个属性OwnerDocument也可以获取,然后调用Save方法就行了。(路径要作为参数传进去),其实Xml一旦加载到内存,XmlNode的所有操作都是针对内存中的文档流进行的,一旦保存就会将文档流写到你指定的路径下。 是这样的,选中Treeview的节点,可以得到TreeNode的Text等信息,但却不是xmlNode对象,只不过是文本信息罢了,如何根据这节点的文本信息获得实际的xmlNode呢? DotNetBar这个工具软件里有一个Treeview的升级树控件能够实现你想要的功能,我们开发的一个项目就是用的这个控件 我觉得你可以自定义个类UserNode让他继承TreeNode,放入TreeView中的都是你构建的UserNode对象,然后将UserNode扩展一个XmlNode节点的功能,最简单的就是XmlNode对象作为成员变量放到UserNode中,这样的话,你的问题都可以解决了。一句话,就是将UserNode 和 XmlNode进行一一合成。 哦,我想合成的方法可能会比较困难了些。我呢是通过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是不是只有这一种方式呢? 这种方法是把xmlNode作为UserNode的一个成员,但是似乎还是无法得知点击了节点到底该定位到xmlDoc里面的哪个位置吧?因为目的是要修改并且要保存的,问题的关键是定位问题。 能够知道,因为XmlNode这个对象就有方法能够获得,当前节点的父节点对象,子节点对象,同级的相邻前节点和后节点对象,这些信息难道还不够你确定位置吗?XmlNode这个节点不仅仅是一个节点对象,它还有保存了XML中的树形结构关系在里面。。还有 你可以对XmlDocument的GetElementByID或者GetElementByName方式来获得你要的节点啊,不知道我理解的对不对方便的话 可以把你的需求描述详细一点。 我的意思是,给用户一个treeview显示xmlDoc的结构,因此用户也只能点击Treeview控件的节点。现在的问题就是解决Treeview的节点和xmlNode的对应问题。当然我是用的从根节点逐级通过索引的方式定位到用户点击的Treenode对应的xmlNode的。不过觉得这个方法有些麻烦,当然之前想过GetElementByID和GetElementByName,但这两个方法好像返回的是nodelist对象类型。所以改了想法,采用索引定位法。不过这种方法也不好,如果节点增加或删除后,保存到xmlDoc离职后要重新加载的不然索引值就不对了。不过您说的合成的办法我有些不太明白,当然隐隐还是觉得或真是解决方法。只是未实施,主要是也没太理解透彻。 对不起,我还是有个问题没有弄明白,就是你为什么非要【从根节点逐级通过索引的方式定位到用户点击的Treenode对应的xmlNode的。】这样做,用户在Treeview中点击选中的节点通过SelectedNode就能获得,既然获得了UserNode这个对象,那么他所对应的XmlNode不直接就能引用了吗?因为XmlNode是UserNode的成员变量啊。而且你对Treeview中的节点进行增加或删除时,肯定也要及时对加载到内存中的xmlDoc结构进行相应的操作(通过xmlNode进行修改),至于你及时保存,还是在程序退出时保存,你可以自己决定啊。 过年过得好久没有上来看了,不好意思才看到。我想你上面所说的是通过自定义UserNode类来实现的吧。我还没有实现这个类呢,所以目前用的只能是通过Treeview的Node的tag值这一线索逐层便利的方式定位到的。我知道这个方法是比较笨的,当然对于你说的实现自定义treenode这个对于我来说稍难了些。我还没有考虑好怎么弄好。下一步就准备搞一搞这自定义的treenode。前些时候弄带三种状态的Box的treeview控件时,就是因为没有想好怎么对这个treenode进行扩展因而自定义的这个控件做的还不完美。也就是我想实现添加一个节点时节点是带有Box的,我现在只是用了其他方法后期让他带了box。(带选择框的treeview控件是两种状态的,而且没有级联,所以自己要开发三态treeview) 數據庫操作,高手求救 .net2 webbrowser 如何判断DocumentCompleted真正完成? 如何使用TCPCLIENT登陆搭到GMAIL邮箱? 问个问题,大家在写代码的时候会用到设计模式么 类似这样的XML如何解开? 在datagridview中增加按钮的问题。 求一本学习【C#】好的教材! 不可序列话的类的实例不能在remoting中传递吗??? Dns.GetHostByAddress在不同的机子上运行速度差别很大? 关于动态生成的问题 关于程序执行流程的问题 请大家看看,帮我修改
所有的细节都隐藏了ConfigurationManager.AppSettings属性直接返回配置文件所有的键值对打开应用程序的配置文件:
Configuration config=ConfigurationManager.OpenExeConfiguration()(XX.exe.config)添加新键值对:config.AppSettings.Settings.Add(newKey, newValue);MSDN上看下相关类
现在加载xml到treeview不是问题,可是选中一个节点时,如何获取他的xmlNode?获取了xmlNode才可以列出其属性值不是吗?
再就是,即便列出了,修改后如何写入XDoc里呢?
既然获取节点之后,修改其节点的属性或节点值,肯定是对XmlNode进行的,通过它的setAttribute或InnerText等,保存的话,只需要知道XmlDocument对象通过他的Save方法就可以,你加载Xml应该是用XmlDocument的吧,这个类很好用的,XmlNode其实有一个属性OwnerDocument也可以获取,然后调用Save方法就行了。(路径要作为参数传进去),其实Xml一旦加载到内存,XmlNode的所有操作都是针对内存中的文档流进行的,一旦保存就会将文档流写到你指定的路径下。
xNode = XDoc.DocumentElement;
for (int i = 1; i < sNodes.Length; i++)
{
xNode = xNode.ChildNodes[Convert.ToInt16(sNodes[i])];
}
不过这种办法还是一级一级的定位节点的方式,我觉得有点复杂,那xmlnode是不是只有这一种方式呢?
前些时候弄带三种状态的Box的treeview控件时,就是因为没有想好怎么对这个treenode进行扩展因而自定义的这个控件做的还不完美。也就是我想实现添加一个节点时节点是带有Box的,我现在只是用了其他方法后期让他带了box。(带选择框的treeview控件是两种状态的,而且没有级联,所以自己要开发三态treeview)