首页 > 语言 > 关键词  > ASP.NET最新资讯  > 正文

ASP.NET读取XML某节点所有数据返回DataTable实例

2009-12-16 09:24 · 稿源:dodo,www.xueit.com

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

XML Code [https://www.xueit.com]
<?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 [https://www.xueit.com]
/// <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 [https://www.xueit.com]
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节点数据了,最后看下效果图:

教程比较短,多多交流!

dodo

https://www.xueit.com/html/2009-12-15/21-97718778265.html

本文版权归作者和学IT网共有,欢迎转载,但未经作者同意必须保留此段声明,并且保留原文链接。否则保留追究法律责任的权利。

  • 相关推荐
  • 大家在看
  • 腾讯云服务器12.12限时秒杀-1核2G首年50元

    腾讯云服务器12.12多种机型限时抢购,1核2G服务器4.17元/月,2核4G服务器6.17元/月,专业技术7*24小时在线服务,腾讯云为企业和个人提供快捷,安全,稳定的云服务!

    广告
  • DarkCarrot

    “DarkCarrot”是2021年B站百大UP主,B站账户注册性别为:男,截止到发稿时间2022年1月11日,粉丝数量为388799人,并关注了其他36个UP主...B站在2021年百大UP主宣传介绍中,给与UP主的介绍信息如下:他被粉丝亲切地称为“黑萝卜”,是无数星际玩家眼中黑暗的泰伦市长,用行动实现了“有生之年星际也能上热门”的上古预言...

  • 曾惊动了Netflix的盗版软件Popcorn Time宣布关闭

    曾经流行的应用Popcorn Time宣布关闭了,它曾让观看盗版电影和电视剧几乎像使用Netflix一样容易。这款应用于2014年首次亮相并在一年内成为访问非法视频内容的最流行服务之一。2015年,Netflix在一份财务报告中警告投资者Popcorn Time的崛起,CEO Reed Hastings宣称:“盗版仍是我们最大的竞争对手之一。”Popcorn Time的创建者在其推出后不久就放弃了这项服务,索尼集团公司被黑后公布的电子邮件显示,执法部门在这其中可能发挥了?

  • 盗版软件Popcorn Time宣布关闭 曾是Netflix最大“竞争”对手

    盗版软件Popcorn Time宣布关闭了。这个通过盗版BitTorrent资源向用户传递电影内容,并承诺可带来Netflix式的体验的应用,正式宣布关闭了。

  • xMEMS发布Montara Pro 首款集成DynamicVent的单片MEMS微扬声器

    xMEMS实验室今天推出了Montara Pro,这是世界上第一款集成了DynamicVent的单片MEMS微扬声器,结合了闭合式和开放式耳塞的优点,可用于智能TWS耳塞和助听器,创造出两全其美的用户体验。Montara Pro采用DynamicVent专利技术,由耳塞系统DSP根据麦克风检测到的环境噪音水平或运动传感器检测到的听众活动情况智能地打开或关闭。当通风口关闭时,Montara Pro创造了一个具有最佳被动隔离效果的聆听环境,适合音乐和媒体消费,或在有背景

  • Netflix正在提高其在美国的价格

    标准(HD)one最初在2011年以7.99美元的价格推出,然后在2014年、2015年、2017年、2019年和2020年分别上涨至8.99美元、9.99美元、10.99美元、12.99美元和13.99美元......

  • Visual Studio 2022 17.1 Preview 2发布:带来Git、C++和.NET增强功能

    微软刚刚放出了 Visual Studio 2022 17.1 的第二个预览版本,首先是能够更轻松地在并排视图中,比对当前 Git 和其它分支。其次是支持增强的 Detached Head,开发者能够在其中检查提交、导航到存储库中的旧点并运行。此外 Preview 2 现可相对更快地评估查询请求和团队更新,增强多存储库体验,且集成开发环境(IDE)可灵活地开展轻量级的分支管理操作。(图 via Neowin)与此同时,开发者现可在所有活动的存储库中自动创建新分支,?

  • 极狐GitLab|参与开源的正确方式:Upstream First

    近年来,“开源”成为了国内科技公司对外传播技术实力的热门词汇。从闭源到开源,从低调发展,到今年三月国家将“开源”写入十四五规划,这一年,我们共同见证了开源的历史时刻。毋庸置疑,开源正在加速成为中国未来技术发展的关键路径,而开源的发展和生态繁荣离不开多方力量(个人、企业、组织、高校等)的共同参与,一直以来,“Upstream First”被认为是参与开源的正确方式。什么是Upstream?Upstream(上游)这个术语通常指数?

  • MIT开发Twist编程语言:专门解决量子计算数据纠缠问题

    来自麻省理工学院计算机科学和人工智能(CSAIL)的科学家们为量子计算开发了一种新的编程语言--Twist,专门用于解决数据纠缠问题...这是因为现有的信息编码是建立在数字 1 和 0 上的,而量子计算机使用的量子比特这个单位,可同时以0和1的状态存在...量子计算主要处理“纠缠”,这是一种量子比特的计算乘数,它可以转化为很大的能量...它可以帮助那些精通主流编程语言的开发人员在不涉及复杂技术的情况下使用量子计算机......

  • 苹果推出虎年特别版AirTag与Beats Studio Buds

    苹果刚刚推出了虎年特别版的 AirTag 智能寻物标签和 Beats Studio Buds 真无线耳机,从官方晒出的图片来看,其主要采用了红底 + 金色条纹图案的装饰设计风格。虽然与标准款在功能上没有任何差异,但感兴趣的朋友还是可以收藏一套这样的限量款产品。据悉,Beats Studio Buds 虎年特别版将于 2022 年 1 月 1 日开售。遗憾的是,官方尚未披露其是否有溢价。作为参考,标准款的建议零售价为 149 美元(国行 1099 RMB)。然后是虎年特别

  • Baby Shark Dance》成为首个在YouTube上播放量突破100亿次的视频

    据Neowin报道,《Baby Shark Dance》成为有史以来首个在YouTube上播放量突破100亿次的视频...该频道已经上传了超过4000个视频,这些视频以儿童歌曲、游戏和应用程序为基础...歌曲《Despacito》自2017年1月13日上传以来,以7,700,884,017次浏览量排在第二位...这部音乐视频首先在东亚地区传播,此后又在Nickelodeon电视台催生了一部动画电视剧、现场巡演,甚至是NFTs...

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天