天天看点

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>  

    <ActivityId>2</ActivityId>  

    <ActivityName>pass</ActivityName>  

    <BindingPageId>2</BindingPageId>  

    <BindingRoleId>2</BindingRoleId>  

    <ActivityLevel>2</ActivityLevel>  

</Workflow>  

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

首先创建一个读取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

     /// 读取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);  

     }  

   {  

       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

     ///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。  

     public XmlNode getXmlNode(string filename, string activitylevel)  

             XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取          

                 if(activitylevel==ActivityLevel)  

                 {  

                     return xn;  

                 }  

         return null;  

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

ActivityId:2

ActivityName:pass

ActivityLevel:2

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/05/02/2297021.html,如需转载请自行联系原作者