程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用XmlDocument讀取XML節點所有數據

使用XmlDocument讀取XML節點所有數據

編輯:關於ASP.NET

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

 XML Code
<?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
    /// <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
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節點數據了,最後看下效果圖:

教程比較短,多多交流!

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