zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python3.7安装PyQt5的方法
    安装MySQLdb for Python3.7
    在Python中操作谷歌浏览器
    Python 安装pyautogui
    Python 安装selenium
    Python 安装urllib3
    Python使用SMTP发送邮件
    使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员
    AutoHotKey 使用ADODB读取Excel 报ADODB.Connection 未找到提供程序,可能未提供
    绘制一个网格的程序
  • 原文地址:https://www.cnblogs.com/edangame/p/5327985.html
Copyright © 2011-2022 走看看