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

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

步骤/方法

  • 01

    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。 这个类的源码关键的地方都写了注释,很简单。

  • 02

    下面我们来看看如何调用此类: 在程序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>"); } }

  • 03

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

(0)

相关推荐

  • 用JAVA语言测试读取xml信息

    用java语言读取xml树型结构的信息 操作方法 01 建立一个树型结构xml文件 02 创建一个DocumentBuilderFactory对象 03 创建DocumentBuilder对象并加载x ...

  • Excel Vba读取XML

    如下代码示例的功能是,在Excel中,通过VBA代码,读取XML文件中的内容。 Dim rst As ADODB.Recordset Dim stCon As String, stFile As St ...

  • 手机如何读取u盘中的数据资料

    昨天,想把自己电脑里面的电影拷贝到手机里面看,可是拷贝的速度经过数据线实在是太慢了. 想过用wifi传输,可是速度又和自己的网速有关系.怎么办列? 下面的这个办法,教你快速读取U盘中的数据! 操作方法 ...

  • Python中如何利用Pandas读取Excel中的数据

    我们利用Python操作Excel的时候,经常需要读取数据,这个时候就会用到Pandas库了,那么如何运用Pandas读取Excel中的数据呢?下面小编给大家分享一下. 操作方法 01 首先我们打开E ...

  • 手机如何直接读取U盘的数据

    我们都知道U盘一般只能在电脑上被读取数据,所以有时候如果我们出门在外带了U盘却没有把电脑也随身携带的话,那么意味着不能读写U盘里面的文件了.不知大家有没有想过其实我们用手机就能读取U盘中的数据了,而且 ...

  • pandas读取某一行的数据(pandas数据可视化)

    导读:Pandas是一个基于Numpy库开发的更高级的结构化数据分析工具,提供了Series.DataFrame.Panel等数据结构,可以很方便地对序列.截面数据(二维表).面板数据进行处理.作者: ...

  • MATLAB如何读取TXT中的数据?

    操作方法 01 下面我就通过实例介绍一下matlab导入txt数据.. 02 我们经常会用到MTALB读取TXT中数据的情况,下面我们就用下面数据进行示例 03 输入 ex=importdata('e ...

  • Matlab如何读取写入Excel表格数据文件

    软件可以进行表格文件数据提取,以及将各种计算结果数据保存到xls等格式文件中,主要用到xlread及xlswrite函数.这两个函数,分别负责读入数据,已经将结果导出保存至表格文件中,支持大部分格式如 ...

  • python怎样读取txt文件的数据内容

    我们使用python的时候经常需要读取txt文件中的内容,那么该如何读取呢?下面小编给大家分享一下. 操作方法 01 首先我们新建一个txt文件,在里面写入一些内容,如下图所示 02 接下来打开运行界 ...