ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ASP.NET解析xml返回某节点属性的内容

ASP.NET解析xml返回某节点属性的内容

原创 Linux操作系统 作者:iDotNetSpace 时间:2010-01-06 13:37:41 0 删除 编辑

本文内容扩展上一篇文章(ASP.NET读取XML某节点所有数据返回DataTable的实例)的方法,增加一个返回某节点的内容,先来看下XML文件的结构内容.

test.xml


   
   

下面xml解析操作类(扩展的):

    ///


    ///
    /// author:dodo
    /// 网址:www.xueit.com
    ///
    /// 读取XML类
    ///

    ///
    public class xmlHepler
    {
        Hashtable table = new Hashtable();
        T FileName;
        T Root;    //根节点
        T RootAttName; //节点属性名称
        T RootAttValue; //根节点属性值
        T Field;       //Xml字段
        ///
        /// XML文件路径
        ///

        ///
        public xmlHepler(T val)
        {
            FileName = val;
            this.LoadXml(val.ToString());
        }

        ///


        /// XML文件路径
        ///

        ///
        private void LoadXml(string file)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(file);
            table.Add("xml", xdoc);
        }

        ///


        /// 返回XML to DataTable
        ///

        ///
        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;
        }

        ///


        /// 返回xml 节点内容
        ///

        ///
        public string GetXmlToString()
        {
            string strText = string.Empty;
            XmlDocument xdoc = (XmlDocument)table["xml"];
            XmlNodeList xnList = xdoc.DocumentElement.SelectNodes(Root.ToString());

            foreach (XmlNode xnode in xnList)
            {
                if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString())
                {
                    strText = xnode.Attributes[Field.ToString()].InnerText;
                    break;
                }
            }

            return strText;
        }

        #region 设置值
        ///


        /// 根节点
        ///

        public T xmlRoot
        {
            get { return Root; }
            set { Root = value; }
        }
        ///
        /// 节点属性字段名称
        ///

        public T xmlRootAttName
        {
            get { return RootAttName; }
            set { RootAttName = value; }
        }
        ///
        /// 节点属性字段值
        ///

        public T xmlRootAttValue
        {
            get { return RootAttValue; }
            set { RootAttValue = value; }
        }

        ///


        /// 子节点属性字段
        ///

        public T xmlSplitField
        {
            set { Field = value; }
        }
        #endregion
    }
 好,这些都准备好了,下面获取test.xml文件中SecuCode="601600"的Glossary值,新建一个文件test.aspx,在Page_Load()加入如下代码:
    protected void Page_Load(object sender, EventArgs e)
        {
            string str = "";

            xmlHepler xml = new xmlHepler(Server.MapPath("App_Data/test.xml"));
            xml.xmlRoot = "R";
            xml.xmlRootAttName = "SecuCode";
            xml.xmlRootAttValue = "601600";
            xml.xmlSplitField = "Glossary";  //要返回内容的字段
            str = xml.GetXmlToString();

            Response.Write(str);
        }

看下运行的效果,是不是得到我们想要的结果,效果图如下:

OK,就这么简单就可以取到节点的内容了。

原文:http://www.xueit.com/html/2010-01-04/21-1046200041703.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-624445/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5766116