当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 使用XmlDocument读取XML节点所有数据

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 使用XmlDocument读取XML节点所有数据


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 97 ::
收藏到网摘: n/a

网上有好多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节点数据了,最后看下效果图:

教程比较短,多多交流!