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

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

使用XmlDocument读取XML节点所有数据 1、
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。
这个类的源码关键的地方都写了注释,很简单。

使用XmlDocument读取XML节点所有数据 2、
下面我们来看看如何调用此类:
在程序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>");
}
}

使用XmlDocument读取XML节点所有数据 3、
嗯,到现在为此,很简单就可以实现调用XML节点数据了,最后看下效果图:

  

爱华网本文地址 » http://www.413yy.cn/a/8104590103/309203.html

更多阅读

怎样将hao123设为主页? 如何将hao123设为主页

网址太长记不住?不知道哪个网站最适合自己,也不知道上网能干什么?还在为这些烦恼吗?学会使用导航网站,享受网络精彩从这里开始!hao123网址大全是国内最知名的导航网站,它不仅收集的网站多、知名度高、安全性好,还按照功能详细分类,生活服务

怎么弄空间主页图片 韩国手绘小清新插画

怎么弄空间主页图片——简介QQ空间主页图片就是QQ空间皮肤, 怎么弄空间主页图片呢? 我们可以有四种方法弄QQ空间皮肤。第一种:开通黄钻可以免费使用商城的所有皮肤图片,第二种:使用QQ商城部分的免费皮肤图片,第三种:找QQ黄钻好友来索要QQ空

数码入门级单反相机的选购 单反相机选购指南

Canon 5D2+16-35F2.8 II 华盛顿大学图书馆数码入门级单反相机的选购很多童鞋希望能接触摄影,但是预算又有限,所以这里我整理一下入门级的器材配置方案给大家参考。以性价比为最高考虑因素。首先说机型的选择:卡片,微单还是单反的问题

转载 Cisco模拟器Web-IOU使用说明 cisco web iou 教程

原文地址:Cisco模拟器Web-IOU使用说明作者:凌戒丶GNS3作为使用最多的Cisco官方模拟器,是因为它使用简单,所有设置图形化,是一款非常强大的软件。但是它有一些不方便之处——GNS3在三层交换功能上无法完美模拟,另外一些协议不支持配置,例如M

声明:《xmldocument 查找节点 使用XmlDocument读取XML节点所有数据》为网友承诺给一片净土分享!如侵犯到您的合法权益请联系我们删除