zoukankan      html  css  js  c++  java
  • ASP.NET读取XML某节点返回DataTable实例

     

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

     XML Code [http://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 [http://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 [http://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节点数据了,最后看下效果图:

  • 相关阅读:
    根据之前发的那SQL语句查询表结构的语句做了个MSSQL实体类生成器!
    Struts1.1中的配置(转载)
    回首2011,展望My 2012
    Struts1中execute实现过滤控制
    接口通信的方式(上 )http方式
    创建表分区的总结
    mongodb系列一windowXP下的安装
    does not contain method named
    ORA12514 TNS: 监听程序当前无法识别连接描述符中请求的服务
    oracle9i卸载
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/1813140.html
Copyright © 2011-2022 走看看