利用xml轻松读取web.config中的用户自定义节

虽然vs.net2.0为我们提供了

ConfigurationManager.AppSettings["..."]; ConfigurationManager.ConnectionStrings["..."];

这样方便快捷的方法来访问web.config中的AppSettings和ConnectionStrings这二个节的内容

但对于其它节,特别是用户自定义节的访问却并不方便,比如web.config中有这么一段内容

<?xml version="1.0"?>
 <configuration>
...
  <system.webServer>
   <validation validateIntegratedModeConfiguration="false" myname="Jimmy"/>
 
   ...
  </system.webServer>
 </configuration>

我们要访问system.webServer下的validation节点中的validateIntegratedModeConfiguration或myname的属性值,就远远没有象ConfigurationManager.AppSettings这样来得方便,其实web.config是一个标准的xml,我们完全可以按xml的xpath语句来检索xml中的任何内容,这里我提供了一个示例,为了方便操作xml,把对xml的一些操作方法封装到了一个类里,以下是这个类的主要代码

using System;
using System.Xml;
using System.Configuration;
using System.Data;
using System.Collections;
using System.IO;
namespace JIMMY.TOOLS
{
 /**//// <summary>
 /// Description:XML封装操作类1.04版
 /// Author:jimmy mail:yjmyzz@126.com Date:2006-10-28
 /// </summary>
 public class XmlControl
 {
 protected string strXmlFile;
 protected XmlDocument objXmlDoc = new XmlDocument();
 public XmlControl(string XmlFile, Boolean bOverWrite, string sRoot)
 {
 try
 {
 //如果覆盖模式,则强行创建一个xml文档
 if (bOverWrite)
{
                    objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));//设置xml的版本,格式信息
                    objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));//创建根元素
                    objXmlDoc.Save(XmlFile);//保存
                }
 else //否则,检查文件是否存在,不存在则创建
{
 if (!(File.Exists(XmlFile)))
 {
                        objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
                        objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));
                        objXmlDoc.Save(XmlFile);
                    }
                }
                objXmlDoc.Load(XmlFile);
            }
 catch (System.Exception ex)
{
 throw ex;
            }
            strXmlFile = XmlFile;
        }
 /**//// <summary>
 /// 根据xPath值,返回xPath下的所有下级子结节到一个DataView
 /// </summary>
 /// <param name="XmlPathNode">xPath值</param>
 /// <returns>有数据则返回DataView,否则返回null</returns>
 public DataView GetData(string XmlPathNode)
 {
 //查找数据。返回一个DataView
            DataSet ds = new DataSet();
 try
 {
                StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
                ds.ReadXml(read);
 return ds.Tables[0].DefaultView;
            }
 catch
 {
 //throw;
 return null;
            }
        }
 //...为了不至于把代码弄得太复杂,其它方法这里略去
    }
}

 回到正题,以下是访问system.webServer下的validation节点中的validateIntegratedModeConfiguration或myname的属性值的代码

当然用先using JIMMY.TOOLS 以下是主要代码

XmlControl xc = new XmlControl(Server.MapPath("~/web.config"), false, "configuration");
DataView dv = xc.GetData("configuration/system.webServer/validation");
Response.Write(dv[0][0].ToString() + "<br/>");//输出validateIntegratedModeConfiguration的属性值
Response.Write(dv[0][1].ToString());//输出myname的属性值

甚至还可以将结果绑定到一个GridView上

GridView1.DataSource = dv;
GridView1.DataBind();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

.net访问PostgreSQL数据库发生“找不到函数名”的问题追踪

    PostgreSQL是一个使用广泛的免费开源的数据库,与MySQL比较,它更适合复杂的企业计算任务,而MySQL在互联网领域应用更为广泛,究其原因,可能...

3497
来自专栏Spark生态圈

[spark] Task执行流程

在文章TaskScheduler 任务提交与调度源码解析 中介绍了Task在executor上的逻辑分配,调用TaskSchedulerImpl的resourc...

1631
来自专栏小勇DW3

Mybatis使用动态代理实现拦截器功能

  拦截器顾名思义为拦截某个功能的一个武器,在众多框架中均有“拦截器”。这个Plugin有什么用呢?或者说拦截器有什么用呢?可以想想拦截器是怎么实现的。Plug...

3242
来自专栏清晨我上码

异步任务执行的设计模式

2273
来自专栏跟着阿笨一起玩NET

关于webservice不支持方法重载的解决办法

1171
来自专栏编程

java框架,springAOP-顾问的实现必须要把通知功能封装起来!

好的各位小伙伴,上次分享的【springAOP—实现通知系统的全过程】大家学会了吗? 如果学会了那么我们今天就继续分享! 好了又到了共享知识的时刻了 准备好了吗...

19010
来自专栏程序员的SOD蜜

调用PostgreSQL存储过程,找不到函数名的问题

PostgreSQL的表,函数名称都是严格区分大小写的,所以在使用的时候没有注意大小写问题容易导致找不到函数名的错误,但最近两天我们发现,如果函数参数使用了自定...

2685
来自专栏后端沉思录

并行执行任务思考

这篇文章由之前的并行执行任务发展而来,如何生成task,在之前的文章中,生成task方式如下:

771
来自专栏后端之路

批量查询DB的实现

背景 由于业务量的上涨,门店转入业务数据的需求,催生了一批excel导入系统的需求。但是由于原先excel导入的实现基于行的模式(一行一行导入) 导致系统导入的...

2267
来自专栏Flutter&Dart

DartVM服务器开发(第二十一天)--Dart中的Gson(jaguar_serializer)

将上面的Info改为List<Info> 重新运行命令pub run build_runner build 转换跟上面一样

1901

扫码关注云+社区

领取腾讯云代金券