C# XML解析方式实例解析1

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

C# XML解析通过XPath的方式是如何办到的呢?具体的操作步骤是什么呢?那么下面我们就向你介绍通过XPath的方式来实现C# XML解析,希望对你了解C# XML解析有所帮助。

C# XML解析通过XPath的方式的步骤:

1、需要先加载文档,然后再读取想要的节点值。

◆xml文档

protected XmlDocument doc = null;

◆xml文档的根元素(节点)

protected XmlElement root = null;

◆xml文档的名空间管理器

protected XmlNamespaceManager nsmgr = null;

2、接下来就是加载文档了

protected void LoadXmlFile(FileInfo xmlFile)    {  if (xmlFile == null || !xmlFile.Exists)  {   throw new FileNotFoundException(  string.Format("要解析的文件不存在{0}。",  xmlFile.FullName));  }  //加载文件  this.doc = new XmlDocument();  doc.Load(xmlFile.FullName);  //准备读取文件  root = doc.DocumentElement;  string nameSpace = root.NamespaceURI;  nsmgr = new XmlNamespaceManager(doc.NameTable);  nsmgr.AddNamespace("ns", nameSpace);    } 

◆C# XML解析通过XPath的方式要注意。

a、这两行是取得xml文档的名空间

root = doc.DocumentElement;  string nameSpace = root.NamespaceURI; 

b、这两行是建立xml文档的名空间管理器

nsmgr = new XmlNamespaceManager(doc.NameTable);  nsmgr.AddNamespace("ns", nameSpace); 

如果你的xml文档有名空间,则这部分的代码是必不可少的。

3、接下来就是读取文档节点的值了

这里两个传入参数prefixPath是节点的上级节点路径,xRelativePath是要读取的节点名称。

另外,变量XmlFileInfo是要加载的xml文件。

protected string GetNodeValue(  string prefixPath, string xRelativePath)    {  if (doc == null)  {   LoadXmlFile(XmlFileInfo);  }  string xPath = string.Empty;  if (!string.IsNullOrEmpty(xRelativePath))  {   if (!string.IsNullOrEmpty(prefixPath))   {    xPath = prefixPath + xRelativePath;   }   else  {    xPath = xRelativePath;   }  }  xPath = xPath.Replace("/", "/ns:");  XmlNode node = root.SelectSingleNode(xPath, nsmgr);  if (node == null)  {   return null;  }  return node.InnerXml;    } 

可能有的朋友要问,为什么要设置两个参数prefixPath和xRelativePath呢,其实这个没有多大的关系,我只是为了自己觉得方便,你也可以在方法外确定了这个XPath,在方法中只设置一个传入参数,效果是一样的。

◆注意这一行:

xPath = xPath.Replace("/", "/ns:"); 

如果你的xml文档带名空间,则这行是比不可少的,否则会出现找不到节点,无法解析的情况。

关于XPath的一些问题:

对于这样一个xml文档,要查找第一个节点下的学生的Name时(ID=01),其XPath应该是"/ns:Root/ns:Students/ns:Student[1]/ns:Name"。xml对于重复的节点名称,是按照顺序1,2,3...的方式遍历的,也就是说如果要找第N个Student节点的下的节点之,那么应使用Student[N]的标识方式。

﹤?xml version="1.0" encoding="UTF-8" ?﹥  ﹤Root xmlns="urn:ClassNameSpace"﹥  ﹤Class﹥  ﹤ClassID﹥1234﹤/ClassID﹥  ﹤/Class﹥  ﹤Students﹥  ﹤Student﹥  ﹤ID﹥01﹤/ID﹥﹤Name﹥Name01﹤/Name﹥  ﹤/Student﹥  ﹤Student﹥  ﹤ID﹥02﹤/ID﹥﹤Name﹥Name02﹤/Name﹥  ﹤/Student﹥  ﹤/Students﹥  ﹤/Root﹥ 

当然,这里也可以获取节点属性的值,查找满足特定值的节点等等,这些和上面获取节点值的过程是类似的。



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/26/1917476.html,如需转载请自行联系原作者

目录
相关文章
|
5天前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
83 57
|
10天前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`<p>`、`<body>`和`<html>`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
20天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
22天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
22天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
67 0
|
22天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
55 0
|
22天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
47 0
|
22天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
53 0
|
22天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
64 0
|
3天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
19 3

推荐镜像

更多