zoukankan      html  css  js  c++  java
  • C#中读取xml文件指定节点

    • View Code
       1 01.class Program  
       2 02.   {  
       3 03.       static void Main(string[] args)  
       4 04.       {  
       5 05.           XMLOperation xmlOpr = new XMLOperation();  
       6 06.           XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");  
       7 07.           string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;  
       8 08.           string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;  
       9 09.           string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;  
      10 10.           Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);  
      11 11.           Console.Read();  
      12 12.       }  
      13 13.   }  
      XmlDocumentSelectSingleNode方法的使用
    • XmlDocumentSelectNodes方法的使用
    • 通过节点属性查找指定节点

    假设xml文件内容是:

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>  
     2 <Workflow>  
     3   <Activity>  
     4     <ActivityId>1</ActivityId>  
     5     <ActivityName>start</ActivityName>  
     6     <BindingPageId>1</BindingPageId>  
     7     <BindingRoleId>1</BindingRoleId>  
     8     <ActivityLevel>1</ActivityLevel>  
     9   </Activity>  
    10   <Activity>  
    11     <ActivityId>2</ActivityId>  
    12     <ActivityName>pass</ActivityName>  
    13     <BindingPageId>2</BindingPageId>  
    14     <BindingRoleId>2</BindingRoleId>  
    15     <ActivityLevel>2</ActivityLevel>  
    16   </Activity>  
    17 </Workflow>  

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

    1.XmlDocument.SelectSingleNode方法的使用

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

    View Code
     1 01./// <summary>    
     2 02.      /// 读取xml中的指定节点的值  
     3 03.      /// </summary>    
     4 04.      public void ReadXmlNode(string filename)  
     5 05.      {  
     6 06.          XmlDocument xmlDoc = new XmlDocument();  
     7 07.          try  
     8 08.          {  
     9 09.              xmlDoc.Load(filename);  
    10 10.              //读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点  
    11 11.              XmlNode root = xmlDoc.SelectSingleNode("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取          
    12 12.              if (root != null)  
    13 13.              {  
    14 14.                  string ActivityId = (root.SelectSingleNode("ActivityId")).InnerText;  
    15 15.                  string ActivityName = (root.SelectSingleNode("ActivityName ")).InnerText;  
    16 16.                  string ActivityLevel = root.SelectSingleNode("ActivityLevel").InnerText;  
    17 17.                  Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);  
    18 18.              }  
    19 19.              else  
    20 20.              {  
    21 21.                  Console.WriteLine("the node  is not existed");  
    22 22.                  //Console.Read();  
    23 23.              }  
    24 24.          }  
    25 25.          catch (Exception e)  
    26 26.          {  
    27 27.              //显示错误信息  
    28 28.              Console.WriteLine(e.Message);  
    29 29.          }  
    30 30.      }  

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

    View Code
    1 01.class Program  
    2 02.   {  
    3 03.       static void Main(string[] args)  
    4 04.       {  
    5 05.           XMLOperation xmlOpr = new XMLOperation();  
    6 06.           xmlOpr.ReadXmlNodes("activity.xml");  
    7 07.           Console.Read();  
    8 08.       }  
    9 09.   }  

    输出结果为:

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

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

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

    View Code
     1 01./// <summary>    
     2 02.     ///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。  
     3 03.     /// </summary>    
     4 04.     public XmlNode getXmlNode(string filename, string activitylevel)  
     5 05.     {  
     6 06.         XmlDocument xmlDoc = new XmlDocument();  
     7 07.         try  
     8 08.         {  
     9 09.             xmlDoc.Load(filename);  
    10 10.             XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取          
    11 11.             foreach (XmlNode xn in xnList)  
    12 12.             {  
    13 13.                 string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;  
    14 14.                 if(activitylevel==ActivityLevel)  
    15 15.                 {  
    16 16.                     return xn;  
    17 17.                 }  
    18 18.             }  
    19 19.         }  
    20 20.         catch (Exception e)  
    21 21.         {  
    22 22.             //显示错误信息  
    23 23.             Console.WriteLine(e.Message);  
    24 24.         }  
    25 25.         return null;  
    26 26.     }  

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

    View Code
     1 01.class Program  
     2 02.   {  
     3 03.       static void Main(string[] args)  
     4 04.       {  
     5 05.           XMLOperation xmlOpr = new XMLOperation();  
     6 06.           XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");  
     7 07.           string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;  
     8 08.           string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;  
     9 09.           string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;  
    10 10.           Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);  
    11 11.           Console.Read();  
    12 12.       }  
    13 13.   }  

    输出结果为:

    ActivityId:2 ActivityName:pass ActivityLevel:2

    说明:本文出处:http://blog.csdn.net/xw13106209/article/details/6384218

  • 相关阅读:
    哈哈,拖了一天
    内置函数续
    内置函数2
    内置函数1
    内置函数补充
    生成器面试题
    字段值为null的处理
    oracle日期转换报ORA-01810: 格式代码出现两次 01810. 00000 -  "format code appears twice"
    通过sql脚本可以从数据库中查到数据,但是通过jdbc却获取不到
    java外部捕获了异常,但是并没有打印异常和将异常信息写入日志文件
  • 原文地址:https://www.cnblogs.com/zxbzl/p/2948041.html
Copyright © 2011-2022 走看看