雖然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</return 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();
如果網友們還有其它更好的辦法,歡迎交流,我的mail: [email protected]或[email protected]