手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-15 20:02:45

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(',');//构造DataTableDataTable 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。这个类的源码关键的地方都写了注释,很简单。

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>");}}

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

使用XmlDocument读取XML节点所有数据
© 手抄报圈