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文件介绍如何使 ...
随机推荐
- Java中枚举的写法和用法
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
- WPF的Style的TargetType不同写法的异同
原文:WPF的Style的TargetType不同写法的异同 <Style TargetType="TextBlock"> <Setter Property=&q ...
- CodeForces-1155D Beautiful Array
Description You are given an array \(a\) consisting of \(n\) integers. Beauty of array is the maximu ...
- P问题,NP问题,NPC问题,NP-hard问题
1.P问题:一个问题能找到一个在多项式时间里解决他的算法 多项式时间(o(1),o(lgn),o(n的a次方)) 非多项式时间 o(a的n次方) o(n!) 2.NP问题:在多项式时间找不到问题的解 ...
- libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint
Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...
- linux下ipython无法保存历史记录
在Centos7下使用ipython时,发现有个warning,提示无法保存历史记录 [root@localhost pip-]# ipython /usr/local/lib/python3./si ...
- jvm系列(八):jvm知识点总览
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...
- python中列表的常用操作增删改查
1. 列表的概念,列表是一种存储大量数据的存储模型. 2. 列表的特点,列表具有索引的概念,可以通过索引操作列表中的数据.列表中的数据可以进行添加.删除.修改.查询等操作. 3. 列表的基本语法 创建 ...
- 501. Find Mode in Binary Search Tree【LeetCode by java】
Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...
- kettle开源项目部署文档
kettle开源项目部署文档 1.kettle简介 kettle是一款国外开源的ETL(Extract Transform Load)工具,纯java编写,可以在Windows.Linux.Unix上 ...