• C#中读取xml文件指定节点


    假设xml文件内容是

    <?xml version="1.0" encoding="utf-8"?>
    <Workflow>
      <Activity>
        <ActivityId>1</ActivityId>
        <ActivityName>start</ActivityName>
        <BindingPageId>1</BindingPageId>
        <BindingRoleId>1</BindingRoleId>
        <ActivityLevel>1</ActivityLevel>
      </Activity>
      <Activity>
        <ActivityId>2</ActivityId>
        <ActivityName>pass</ActivityName>
        <BindingPageId>2</BindingPageId>
        <BindingRoleId>2</BindingRoleId>
        <ActivityLevel>2</ActivityLevel>
      </Activity>
    </Workflow>

    我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节 点,而后一个则会返回一个节点列表。

    1.XmlDocument.SelectSingleNode方法的使用

    首先创建一个读取xml文件的方法ReadXmlNode

      /// <summary>  
            /// 读取xml中的指定节点的值
            /// </summary>  
            public void ReadXmlNode(string filename)
            {
                XmlDocument xmlDoc = new XmlDocument();
                try
                {
                    xmlDoc.Load(filename);
                    //读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点
                    XmlNode root = xmlDoc.SelectSingleNode("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取        
                    if (root != null)
                    {
                        string ActivityId = (root.SelectSingleNode("ActivityId")).InnerText;
                        string ActivityName = (root.SelectSingleNode("ActivityName ")).InnerText;
                        string ActivityLevel = root.SelectSingleNode("ActivityLevel").InnerText;
                        Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
                    }
                    else
                    {
                        Console.WriteLine("the node  is not existed");
                        //Console.Read();
                    }
                }
                catch (Exception e)
                {
                    //显示错误信息
                    Console.WriteLine(e.Message);
                }
            }

    然后在主函数中调用该方法

    class Program
        {
            static void Main(string[] args)
            {
                XMLOperation xmlOpr = new XMLOperation();
                xmlOpr.ReadXmlNode("activity.xml");
                Console.Read();
            }
        }

    输出结果为:

    ActivityId:1
    ActivityName:start
    ActivityLevel:1

    2.XmlDocument.SelectNodes方法的使用

       /// <summary>  
            /// 读取xml中的指定节点的值,如果有多个同名节点,则全部读取
            /// </summary>  
            public void ReadXmlNodes(string filename)
            {
                XmlDocument xmlDoc = new XmlDocument();
                try
                {
                    xmlDoc.Load(filename);
                    XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");
                    Console.WriteLine("共有{0}个节点", xnList.Count);//输出xnList中节点个数。
                    foreach (XmlNode xn in xnList)
                    {
                        //无法使用xn["ActivityId"].InnerText
                        string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;
                        string ActivityName = xn.SelectSingleNode("ActivityName").InnerText;
                        string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
                        //  Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
                        Console.WriteLine("ActivityId:  {0}/nActivityName:  {1}/nActivityLevel:  {2}", ActivityId, ActivityName, ActivityLevel);
                    }
                }
                catch (Exception e)
                {
                    //显示错误信息
                    Console.WriteLine(e.Message);
                }
            }

    然后在主函数中调用该方法

     class Program
        {
            static void Main(string[] args)
            {
                XMLOperation xmlOpr = new XMLOperation();
                xmlOpr.ReadXmlNodes("activity.xml");
                Console.Read();
            }
        }

     输出结果为:

    共有2个节点
    ActivityId:  1
    ActivityName:  start
    ActivityLevel:  1
    ActivityId:  2
    ActivityName:  pass
    ActivityLevel:  2

    3.通过节点属性查找指定节点

    参考http://www.csharp-examples.net/xml-nodes-by-attribute-value/,虽然没有用到参考文章中的方法,不过总觉得以后会用到的。

       /// <summary>  
            ///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。
            /// </summary>  
            public XmlNode getXmlNode(string filename, string activitylevel)
            {
                XmlDocument xmlDoc = new XmlDocument();
                try
                {
                    xmlDoc.Load(filename);
                    XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取        
                    foreach (XmlNode xn in xnList)
                    {
                        string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
                        if(activitylevel==ActivityLevel)
                        {
                            return xn;
                        }
                    }
                }
                catch (Exception e)
                {
                    //显示错误信息
                    Console.WriteLine(e.Message);
                }
                return null;
            }

    然后在主函数中调用该方法

     class Program
        {
            static void Main(string[] args)
            {
                XMLOperation xmlOpr = new XMLOperation();
                XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");
                string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;
                string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;
                string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
                Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
                Console.Read();
            }
        }

    输出结果为:

    ActivityId:2
    ActivityName:pass
    ActivityLevel:2

  • 相关阅读:
    让我偷偷的告诉你:运维加薪的杀手锏是啥?
    网站页面优化必然趋势—WebP 图片!
    如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
    网页增重不可控?试试 OneAPM Cloud Test
    提高 ASP.NET Web 应用性能的 24 种方法和技巧
    OneAlert 入门(三)——事件分析
    Cloud Insight 客户案例-晨芯时代科技有限公司
    Java开发快速上手
    微信小程序快速开发上手
    微信小程序快速开发上手
  • 原文地址:https://www.cnblogs.com/edangame/p/5327985.html
Copyright © 2020-2023  润新知