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

简介:

参考:Select XML Nodes by Name

假设xml文件内容是

[c-sharp]  view plain copy print ?
  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

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

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

[c-sharp]  view plain copy print ?
  1. class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             XMLOperation xmlOpr = new XMLOperation();  
  6.             xmlOpr.ReadXmlNode("activity.xml");  
  7.             Console.Read();  
  8.         }  
  9.     }  

输出结果为:

ActivityId:1
ActivityName:start
ActivityLevel:1

 

2.XmlDocument.SelectNodes方法的使用

[c-sharp]  view plain copy print ?
  1. /// <summary>    
  2.      /// 读取xml中的指定节点的值,如果有多个同名节点,则全部读取  
  3.      /// </summary>    
  4.      public void ReadXmlNodes(string filename)  
  5.      {  
  6.          XmlDocument xmlDoc = new XmlDocument();  
  7.          try  
  8.          {  
  9.              xmlDoc.Load(filename);  
  10.              XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");  
  11.              Console.WriteLine("共有{0}个节点", xnList.Count);//输出xnList中节点个数。  
  12.              foreach (XmlNode xn in xnList)  
  13.              {  
  14.                  //无法使用xn["ActivityId"].InnerText  
  15.                  string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;  
  16.                  string ActivityName = xn.SelectSingleNode("ActivityName").InnerText;  
  17.                  string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;  
  18.                  //  Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);  
  19.                  Console.WriteLine("ActivityId:  {0}/nActivityName:  {1}/nActivityLevel:  {2}", ActivityId, ActivityName, ActivityLevel);  
  20.              }  
  21.          }  
  22.          catch (Exception e)  
  23.          {  
  24.              //显示错误信息  
  25.              Console.WriteLine(e.Message);  
  26.          }  
  27.      }  

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

[c-sharp]  view plain copy print ?
  1. class Program  
  2.    {  
  3.        static void Main(string[] args)  
  4.        {  
  5.            XMLOperation xmlOpr = new XMLOperation();  
  6.            xmlOpr.ReadXmlNodes("activity.xml");  
  7.            Console.Read();  
  8.        }  
  9.    }  

 输出结果为:

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

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

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

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

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

[c-sharp]  view plain copy print ?
  1. class Program  
  2.    {  
  3.        static void Main(string[] args)  
  4.        {  
  5.            XMLOperation xmlOpr = new XMLOperation();  
  6.            XmlNode xn=xmlOpr.getXmlNode("activity.xml""2");  
  7.            string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;  
  8.            string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;  
  9.            string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;  
  10.            Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);  
  11.            Console.Read();  
  12.        }  
  13.    }  

输出结果为:

ActivityId:2
ActivityName:pass
ActivityLevel:2




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

目录
相关文章
|
5月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
101 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
5月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
135 3
|
12月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
229 1
|
10月前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
178 9
|
11月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
830 8
|
11月前
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
151 2
|
12月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
12月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
431 5
|
12月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
471 4
|
12月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
299 4

热门文章

最新文章

相关课程

更多