您现在的位置>>.Net中文社区>>XML编程

使用XmlDocument读取XML节点所有数据

浏览量: 作者:dodo 来源:互联网

网上有好多ASP.NET读取XML的例子,比如使用Dataset来读取,但本文教程却是使用XmlDocument来读取XML节点下所有数据,我们先来看下这个XML格式:SysRightsDb.xml

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <root> 
  3.   <rights name="SYS"> 
  4.     <xml name="股票行情" code="stockmarket"></xml> 
  5.     <xml name="业务系统" code="sales"></xml> 
  6.     <xml name="客服系统" code="servcice"></xml> 
  7.     <xml name="财务系统" code="financial"></xml> 
  8.     <xml name="呼叫中心系统" code="callcenter"></xml> 
  9.     <xml name="报表系统" code="report"></xml> 
  10.   </rights> 
  11.   <rights name="financial"> 
  12.     <xml name="订单管理" code="so_mana"></xml> 
  13.     <xml name="订单列表" code="so_list"></xml> 
  14.     <xml name="申请审计" code="so_audit_list"></xml> 
  15.     <xml name="权限列表" code="so_ur_sour_list"></xml> 
  16.   </rights>   
  17. </root> 

从这个XML可以看下,我将使用ASP.NET读取权限系统中节点属性等于SYS下所有数据,及读取financial节点下所有数据。

这种XML数据格式让人看起来很明确就知道所代表的意思,看起来也不错。
下面开始吧。

第1、首先创建读取XML类xmlHepler,内容如下:
先引用两个命名空间
using System.Xml;
using System.Collections;

  1. /// <summary> 
  2.     /// 作者:dodo 
  3.     /// 网站:www.xueit.com 
  4.     ///  
  5.     /// 读取XML类 
  6.     /// </summary> 
  7.     /// <typeparam name="T"></typeparam> 
  8.     public class xmlHepler<T>:System.Web.UI.Page 
  9.     { 
  10.         Hashtable table = new Hashtable(); 
  11.         T FileName; 
  12.         T Root;    //根节点 
  13.         T RootAttName; //节点属性名称 
  14.         T RootAttValue; //根节点属性值 
  15.         T Field;       //Xml字段 
  16.         /// <summary> 
  17.         /// XML文件路径 
  18.         /// </summary> 
  19.         /// <param name="val"></param> 
  20.         public xmlHepler(T val) 
  21.         { 
  22.             FileName = val; 
  23.             this.LoadXml(val.ToString()); 
  24.         } 
  25.  
  26.         /// <summary> 
  27.         /// XML文件路径 
  28.         /// </summary> 
  29.         /// <param name="file"></param> 
  30.         private void LoadXml(string file) 
  31.         { 
  32.             XmlDocument xdoc = new XmlDocument(); 
  33.             xdoc.Load(file); 
  34.             table.Add("xml", xdoc); 
  35.         } 
  36.  
  37.         /// <summary> 
  38.         /// 返回XML to DataTable 
  39.         /// </summary> 
  40.         /// <returns></returns> 
  41.         public DataTable GetXmlToDataTable() 
  42.         { 
  43.             string[] SplitField=Field.ToString().Split(','); 
  44.             //构造DataTable 
  45.             DataTable dt = new DataTable(); 
  46.             DataColumn dc = null
  47.             for (int i = 0; i < SplitField.Length; i  ) 
  48.             { 
  49.                 dc = new DataColumn(SplitField[i]); 
  50.                 dt.Columns.Add(dc); 
  51.             } 
  52.             XmlDocument xdoc = (XmlDocument)table["xml"]; 
  53.             XmlNodeList xTable = xdoc.DocumentElement.SelectNodes(Root.ToString()); 
  54.  
  55.             foreach (XmlNode xnode in xTable) 
  56.             { 
  57.                 if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()) //某一节点 
  58.                 { 
  59.                     //该节点下所有子节点 
  60.                     XmlNodeList xnlist = xnode.ChildNodes; 
  61.                     //子节点所有数据 
  62.                     for (int i = 0; i < xnlist.Count; i  )  //for (int i = 0; i < xnode.ChildNodes.Count; i  ) 这句是所有xml子节点数据 
  63.                     { 
  64.                         DataRow dr = dt.NewRow(); 
  65.                         //绑定所需字段 
  66.                         for (int j = 0; j < SplitField.Length; j  ) 
  67.                         { 
  68.                             dr[SplitField[j]] = xnode.ChildNodes[i].Attributes[SplitField[j]].Value; 
  69.                         } 
  70.                         dt.Rows.Add(dr); 
  71.                     } 
  72.                 } 
  73.             } 
  74.             return dt; 
  75.         } 
  76.  
  77.         #region 设置值 
  78.         /// <summary> 
  79.         /// 根节点 
  80.         /// </summary> 
  81.         public T xmlRoot 
  82.         { 
  83.             get { return Root; } 
  84.             set { Root = value; } 
  85.         } 
  86.         /// <summary> 
  87.         /// 节点属性字段名称 
  88.         /// </summary> 
  89.         public T xmlRootAttName 
  90.         { 
  91.             get { return RootAttName; } 
  92.             set { RootAttName = value; } 
  93.         } 
  94.         /// <summary> 
  95.         /// 节点属性字段值 
  96.         /// </summary> 
  97.         public T xmlRootAttValue 
  98.         { 
  99.             get { return RootAttValue; } 
  100.             set { RootAttValue = value; } 

这个xmlHepler类使用DocumentElement.SelectNodes来选择XML节点,之后if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())获取相关属性的节点.
使用方法GetXmlToDataTable()来构造DataTable,把XML节点下所有数据导入到DataTable。
这个类的源码关键的地方都写了注释,很简单。
下面我们来看看如何调用此类:
在程序Page_Load测试调用SysRightsDb.xml,并把相关数据显示出来。
源码如下:

  1. protected void Page_Load(object sender, EventArgs e) 
  2.     xmlHepler<string> xml = new xmlHepler<string>(Server.MapPath("SysRightsDb.xml")); 
  3.     xml.xmlRoot = "rights"
  4.     // 调用SYS节点下数据 
  5.     xml.xmlRootAttName = "name"
  6.     xml.xmlRootAttValue = "SYS"
  7.     xml.xmlSplitField = "code,name"
  8.     DataTable dt = xml.GetXmlToDataTable(); 
  9.     Response.Write("<b>系统权限</b><br>"); 
  10.     foreach (DataRow dr in dt.Rows) 
  11.     { 
  12.         Response.Write("name:" dr["name"].ToString()   " code:" dr["code"].ToString()); 
  13.         Response.Write("<br>"); 
  14.     } 
  15.  
  16.     // 调用financial节点下数据 
  17.     xml.xmlRootAttName = "name"
  18.     xml.xmlRootAttValue = "financial"
  19.     xml.xmlSplitField = "code,name"
  20.     dt = xml.GetXmlToDataTable(); 
  21.     Utils.Response("<b>子系统权限</b><br>"); 
  22.     foreach (DataRow dr in dt.Rows) 
  23.     { 
  24.         Response.Write("name:"   dr["name"].ToString()   " code:"   dr["code"].ToString()); 
  25.         Response.Write("<br>"); 
  26.     } 

嗯,到现在为此,很简单就可以实现调用XML节点数据了,最后看下效果图:

本站部份资源来于互联网,只供学习之用,不得用于商业,如有侵犯版权请联系告知,本站将第一时间删除!
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号