ASP.NET讀取XML某節點所有資料返回DataTable執行個體————–轉載

來源:互聯網
上載者:User

網上有好多ASP.NET讀取XML的例子,比如使用Dataset來讀取,但本文教程卻是使用XmlDocument來讀取XML節點下所有資料,我們先來看下這個XML格式:SysRightsDb.xml

 XML Code [http://www.xueit.com]
<?xml version="1.0" encoding="utf-8" ?><root>  <rights name="SYS">    <xml name="股票行情" code="stockmarket"></xml>    <xml name="業務系統" code="sales"></xml>    <xml name="客服系統" code="servcice"></xml>    <xml name="財務系統" code="financial"></xml>    <xml name="話務中心系統" code="callcenter"></xml>    <xml name="報表系統" code="report"></xml>  </rights>  <rights name="financial">    <xml name="訂單管理" code="so_mana"></xml>    <xml name="訂單列表" code="so_list"></xml>    <xml name="申請審計" code="so_audit_list"></xml>    <xml name="許可權列表" code="so_ur_sour_list"></xml>  </rights>  </root>

從這個XML可以看下,我將使用ASP.NET讀取許可權系統中節點屬性等於SYS下所有資料,及讀取financial節點下所有資料。

這種XML資料格式讓人看起來很明確就知道所代表的意思,看起來也不錯。

下面開始吧。

第1、首先建立讀取XML類xmlHepler,內容如下:

先引用兩個命名空間

using System.Xml;
using System.Collections;

 xmlHepler Code [http://www.xueit.com]
    /// <summary>    /// 作者:dodo    /// 網站:www.xueit.com    ///     /// 讀取XML類    /// </summary>    /// <typeparam name="T"></typeparam>    public class xmlHepler<T>:System.Web.UI.Page    {        Hashtable table = new Hashtable();        T FileName;        T Root;    //根節點        T RootAttName; //節點屬性名稱        T RootAttValue; //根節點屬性值        T Field;       //Xml欄位        /// <summary>        /// XML檔案路徑        /// </summary>        /// <param name="val"></param>        public xmlHepler(T val)        {            FileName = val;            this.LoadXml(val.ToString());        }        /// <summary>        /// XML檔案路徑        /// </summary>        /// <param name="file"></param>        private void LoadXml(string file)        {            XmlDocument xdoc = new XmlDocument();            xdoc.Load(file);            table.Add("xml", xdoc);        }        /// <summary>        /// 返回XML to DataTable        /// </summary>        /// <returns></returns>        public DataTable GetXmlToDataTable()        {            string[] SplitField=Field.ToString().Split(',');            //構造DataTable            DataTable dt = new DataTable();            DataColumn dc = null;            for (int i = 0; i < SplitField.Length; i  )            {                dc = new DataColumn(SplitField[i]);                dt.Columns.Add(dc);            }            XmlDocument xdoc = (XmlDocument)table["xml"];            XmlNodeList xTable = xdoc.DocumentElement.SelectNodes(Root.ToString());            foreach (XmlNode xnode in xTable)            {                if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()) //某一節點                {                    //該節點下所有子節點                    XmlNodeList xnlist = xnode.ChildNodes;                    //子節點所有資料                    for (int i = 0; i < xnlist.Count; i  )  //for (int i = 0; i < xnode.ChildNodes.Count; i  ) 這句是所有xml子節點資料                    {                        DataRow dr = dt.NewRow();                        //綁定所需欄位                        for (int j = 0; j < SplitField.Length; j  )                        {                            dr[SplitField[j]] = xnode.ChildNodes[i].Attributes[SplitField[j]].Value;                        }                        dt.Rows.Add(dr);                    }                }            }            return dt;        }        #region 設定值        /// <summary>        /// 根節點        /// </summary>        public T xmlRoot        {            get { return Root; }            set { Root = value; }        }        /// <summary>        /// 節點屬性欄位名稱        /// </summary>        public T xmlRootAttName        {            get { return RootAttName; }            set { RootAttName = value; }        }        /// <summary>        /// 節點屬性欄位值        /// </summary>        public T xmlRootAttValue        {            get { return RootAttValue; }            set { RootAttValue = value; }        }        /// <summary>        /// 子節點屬性欄位        /// </summary>        public T xmlSplitField        {            set { Field = value; }        }        #endregion    }

這個xmlHepler類使用DocumentElement.SelectNodes來選擇XML節點,之後if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())擷取相關屬性的節點.

使用方法GetXmlToDataTable()來構造DataTable,把XML節點下所有資料匯入到DataTable。

這個類的源碼關鍵的地方都寫了注釋,很簡單。

下面我們來看看如何調用此類:

在程式Page_Load測試調用SysRightsDb.xml,並把相關資料顯示出來。

源碼如下:

 調用xmlHepler Code [http://www.xueit.com]
protected void Page_Load(object sender, EventArgs e){    xmlHepler<string> xml = new xmlHepler<string>(Server.MapPath("SysRightsDb.xml"));    xml.xmlRoot = "rights";    // 調用SYS節點下資料    xml.xmlRootAttName = "name";    xml.xmlRootAttValue = "SYS";    xml.xmlSplitField = "code,name";    DataTable dt = xml.GetXmlToDataTable();    Response.Write("<b>系統許可權</b><br>");    foreach (DataRow dr in dt.Rows)    {        Response.Write("name:" dr["name"].ToString()   " code:" dr["code"].ToString());        Response.Write("<br>");    }    // 調用financial節點下資料    xml.xmlRootAttName = "name";    xml.xmlRootAttValue = "financial";    xml.xmlSplitField = "code,name";    dt = xml.GetXmlToDataTable();    Utils.Response("<b>子系統許可權</b><br>");    foreach (DataRow dr in dt.Rows)    {        Response.Write("name:"   dr["name"].ToString()   " code:"   dr["code"].ToString());        Response.Write("<br>");    }}

嗯,到現在為此,很簡單就可以實現調用XML節點資料了,最後看下:

教程比較短,多多交流!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.