天天看點

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,如需轉載請自行聯系原作者