热门标签:
使用XmlDocument读取XML节点所有数据
浏览量:
作者:dodo
来源:互联网
网上有好多ASP.NET读取XML的例子,比如使用Dataset来读取,但本文教程却是使用XmlDocument来读取XML节点下所有数据,我们先来看下这个XML格式:SysRightsDb.xml
- <?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;
- /// <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; }
这个xmlHepler类使用DocumentElement.SelectNodes来选择XML节点,之后if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())获取相关属性的节点.
使用方法GetXmlToDataTable()来构造DataTable,把XML节点下所有数据导入到DataTable。
这个类的源码关键的地方都写了注释,很简单。
下面我们来看看如何调用此类:
在程序Page_Load测试调用SysRightsDb.xml,并把相关数据显示出来。
源码如下:
- 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节点数据了,最后看下效果图:

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

