雖然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:[email protected] 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();
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();