程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 利用xml輕松讀取web.config中的用戶自定義節

利用xml輕松讀取web.config中的用戶自定義節

編輯:.NET實例教程

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved