c#(.Net)解析xml
1、一般处理
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><HH><CODE>11</CODE><NAME>kkkk</NAME></HH>");
XmlNode rootNode = xmlDoc.SelectSingleNode("HH");
foreach (XmlNode xxNode in rootNode.ChildNodes)
{
string dsf = xxNode.InnerText;
string sdf = xxNode.Name;
}
2、利用DataTable
DataSet dsData = new DataSet();
dsData.ReadXml(new XmlTextReader(new StringReader("<?xml version=\"1.0\" encoding=\"utf-8\"?><HH><CODE>11</CODE><NAME>kkkk</NAME></HH>")));
DataTable dt = dsData.Tables["HH"]; foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn dc in dr.Table.Columns)
{
string n = dc.ColumnName;
string value = dr[n].ToString();
}
}
3、带有命名空间(NameSpace)的XML文本解析
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.lucernepublishing.com"
xml:base="http://www.semanticweb.org/ontologies/2012/2/OntologyMinePower.owl">
<book>
<title>C语言</title>
<author name ="XIAO">
<age>25</age>
</author>
<price>50</price>
</book>
<book>
<title>数据库</title>
<price>100</price >
</book >
<book>
<title>数据结构</title>
<age>100</age>
<author name ="Wang">
<age>25</age>
<sex>female</sex>
</author>
<price>66.5</price >
</book >
</bookstore>
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"..\..\CD.xml"); XmlElement root = null;
root = doc.DocumentElement; XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com"); XmlNodeList listNodes = null;
listNodes = doc.SelectNodes("/ab:bookstore/ab:book[ab:author[ab:sex]]/ab:price", nsmgr);
foreach (XmlNode node in listNodes )
{
richTextBox1.Text += node.InnerText + "\n";
}
}
该XPath语言的意思是查询bookstore下的所有带有author节点,并且author节点带有sex节点的book节点的price子节点。其结果是66.5
对于有命名空间的XML文本的解析,只需调用XmlNode.SelectNodes的不同的重载函数,赋予XmlNamespaceManager参数,并相应调整XPath语句即可。
详细参考
1.这里我参照MSDN给出一个XML源文件,为了显示不同的效果,XML结构在逻辑上并不合理
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book>
<title>C语言</title>
<author name ="XIAO">
<age>25</age>
</author>
<price>50</price>
</book>
<book>
<title>数据库</title>
<price>100</price >
</book >
<book>
<title>数据结构</title>
<age>100</age>
<author name ="Wang">
<age>25</age>
<sex>female</sex>
</author>
<price>66.5</price >
</book >
</bookstore>
2.简单示例
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"..\..\CD.xml"); XmlElement root = null;
root = doc.DocumentElement; XmlNodeList listNodes = null;
listNodes = root.SelectNodes("/bookstore/book/price");
foreach (XmlNode node in listNodes )
{
richTextBox1.Text += node.InnerText + "\n";
}
}
这里 listNodes=root.SelectNodes("/bookstore/book/price");意思是选取所有符合bookstore——>book——>price层级关系的price节点
效果如下图:

3.XPath详解
1)"/bookstore/book/price"
XPath的开头是一个斜线(/)代表这是绝对路径,这可以选出所有路径符合这个模式的元素。这代表选出所有bookstore根节点下的book元素下的price元素。
2)"//title"
开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。这代表选出所有title元素。
3)"/bookstore/book/author/*"
使用星号(*)可以选择未知的元素。这代表选出bookstore根节点下的book节点下的anthor节点下的所有可能的节点。
得到的结果:25 25 female
4)"/bookstore/book/*/age"
上面的语法会选出所有bookstore根节点下的book节点的隔一个层次的age节点。
得到的结果为:25 25
5)"/*/*/age"
选取有两个层级的age元素,得到的结果为:100
要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。
6)"bookstore/book[1]/title"
使用中括号可以选择分支。这代表选择bookstore根节点下第一个book节点的title节点。
得到的结果为:C语言
7)"bookstore/book[last()]/title"
同样,这里表示选择最后一个节点,得到的结果是:数据结构
8)"bookstore/book/author[sex]"
这里表示选取所有带有sex元素并满足一定层次结构的author节点,得到的结果是:25female
9)"/bookstore/book[price=66.5]/title"
选取price元素值是66.5的book节点的title子节点,得到的结果是:数据结构
10)"/bookstore/book/title | /bookstore/book/price"
使用Or操作数(|)就可以选择一个以上的路径。这里表示选取符合一定层次结构的title元素与price元素
其结果是:C语言 50 数据库 100 数据结构 66.5
11)"//@name"
在XPath中,除了选择元素以外,也可以选择属性,属性都是以@开头。这里表示选取所有的name属性。
其结果是:XIAO Wang
12)"//author[@name]/age"
这里表示选取所有具有name属性的author节点的age节点。其结果是:25 25
13)"//*[@*]"
选取所有有属性的节点。其结果是:25 25female
14)"//author[@name='Wang']/sex"
选取所有属性name值为Wang的author节点的sex子节点。其结果是:female
c#(.Net)解析xml的更多相关文章
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Android之解析XML
1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- WP8解析XML格式文件
DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式,如果要返回XML格式的话,需要在加上format=xml. 这里举一个简单的解析XML格式的例子(更 ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
随机推荐
- 2017-2018-2 20155224『网络对抗技术』Exp8:Web基础
实践具体要求 Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt(0.5分) 理 ...
- 20155301 Exp7 网络欺诈防范
20155301 Exp7 网络欺诈防范 1.基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 (2)在日常生活工作中如何防范以上两攻击方法 2.实践过程记录 简单应用SET工具建立 ...
- Flutter - 创建底部导航栏
之前写过的一篇文章介绍了 Flutter - 创建横跨所有页面的侧滑菜单, 这次就一起来学习一下底部导航栏. 底部导航栏在ios平台上非常常见,app store就是这样的风格.还有就是大家最常用的微 ...
- 配置LNPM
在 Ubuntu 系统中,可以使用 apt-get 命令来搭建 LNMP环境.这种方式较编译方式安装更加简便,因此选择使用该方式来搭建环境以供学习. 安装Nginx 使用 sudo apt-get i ...
- unity2D背景移动补偿从而获得3d错觉效果
2d平台跳跃游戏当相机移动的时候背景跟随进行微调移动,从而使得玩家获得3d的错觉 using System.Collections;using System.Collections.Generic;u ...
- k8s网络之calico学习
一.知识准备 1.calico主要通过ipip协议与bgp协议来实现通信.前者通过ipip隧道作为通信基础,后者则是纯三层的路由交换 2.bgp协议主要由两种方式:BGP Speaker 全互联模式( ...
- 无前趋的顶点优先的拓扑排序方法(JAVA)(转载http://128kj.iteye.com/blog/1706968)
无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输出当前无前趋(即人度为零)的顶点,其抽象算法可描述为: NonPreFirstTopSort(G){//优先输出无前趋的顶点 w ...
- 《Linux内核分析》 第一节 计算机是如何工作的
第一节 计算机是如何工作的 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第5&6周作业问题总结
一.作业内容 第5周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK05 第6周作业 http://www.cnblogs.com/rocedu ...
- @PathVariable获取带点参数,获取不全
{account:.+}在{account}后加上:.+ 可参考原博:http://blog.csdn.net/jrainbow/article/details/46126179