雖然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]