读取XML文件(XmlNode和XmlElement区别)
XmlNode和XmlElement区别。这两个类的功能极其类似(因为我们一般都是在对Element节点进行操作)。
1、通过继承关系XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子类。我们知道子类继承了父类所有的属性和方法,因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可以使用的。
2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。
3、XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument实例通过CreateNode创建。
4、XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作(XmlNode也可以通过Attributes属性获取属性列表)。
元素(Element)和结点(Node)的区别,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
<Alarmlock="true"> //node
<Time> //node
StringValue //node
</Time> //node
</Alarm> //node
以上Alarm(元素节点),lock(属性节点),Time(元素节点),StringValue(文本节点)都是Node,但是只有 <Alarm>......</Alarm>和<Time>StringValue</Time>是Element
XmlDocument xmlDoc = new XmlDocument();
string filePath = Path.Combine(AppContext.BaseDirectory, "Configuration", sDir, string.Format("{0}.xml", sXmlName));
StringBuilder builder = new StringBuilder();
using (FileStream fs = File.Open(filePath, FileMode.OpenOrCreate))
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
builder.Append(sr.ReadToEnd());
}
}
if (builder.Length > 0)
xmlDoc.LoadXml(builder.ToString()); //
return xmlDoc;
注意:
xmldoc.load可以加载文件,比如:xmldoc.load("c:\\a.xml");
而xmldoc.loadXML是加载xml格式的字符串,比如:xmldoc.loadXML("<aab>aaa</aab>")
-----------------------
举例说明
1: <?xml version="1.0" encoding="utf-8"?>
2: <bookstore>
4: <book Type="必修课" ISBN="7-111-19149-2">
5: <title>数据结构</title>
6: <author>严蔚敏</author>
7: <price>30.00</price>
8: </book>
9: <book Type="必修课" ISBN="7-111-19149-3">
10: <title>路由型与交换型互联网基础</title>
11: <author>程庆梅</author>
12: <price>27.00</price>
13: </book>
34: </bookstore>
1: // 得到根节点bookstore
2: XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
5: // 得到根节点的所有子节点
6: XmlNodeList xnl = xn.ChildNodes;
8: foreach (XmlNode xn1 in xnl)
9: {
11: // 将节点转换为元素,便于得到节点的属性值
12: XmlElement xe = (XmlElement)xn1;
13: // 得到Type和ISBN两个属性的属性值
14: bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
15: bookModel.BookType = xe.GetAttribute("Type").ToString();
16: // 得到Book节点的所有子节点
17: XmlNodeList xnl0 = xe.ChildNodes;
18: bookModel.BookName=xnl0.Item(0).InnerText;
19: bookModel.BookAuthor=xnl0.Item(1).InnerText;
20: bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);
21: bookModeList.Add(bookModel);
22: }
//获取根节点
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlElement root = doc.DocumentElement;
//获取子节点集合
//XmlNodeList xnl = root.ChildNodes;
XmlNodeList personNodes = root.GetElementsByTagName("book"); //两个table
方法一:SelectNodes
xml样式:
<?xml version="1.0" encoding="utf-8" ?>
<TableLists>
<Columns Name="A01" >
<Item Id="ID1" Filed="Name" MappingName="姓名" Code="Value" />
<Item Id="ID2" Filed="Name" MappingName="年龄" Code="Value"/>
<Item Id="ID3" Filed="Name" MappingName="性别" Code="Value"/>
<Item Id="ID4" Filed="Name" MappingName="部门" Code="Value"/>
</Columns>
<Columns Name="A02" >
<Item Id="ID21" Filed="Name" MappingName="姓名" Code="Value" />
<Item Id="ID22" Filed="Name" MappingName="年龄" Code="Value"/>
<Item Id="ID23" Filed="Name" MappingName="性别" Code="Value"/>
<Item Id="ID24" Filed="Name" MappingName="部门" Code="Value"/>
</Columns>
</TableLists>
XmlDocument doc = new XmlDocument();
doc.Load(fileRelationPath);
XmlNodeList a01Nodes = doc.SelectNodes("TableLists/Columns"); //2个columns
XmlNodeList a01Node = doc.SelectNodes("//Columns"); //2个columns
XmlNodeList a01Nodes = doc.SelectNodes("TableLists/Columns/Item"); //8个Item
XmlNodeList a01Node = doc.SelectNodes("//Item"); //8个Item
foreach (XmlNode xnode in a01Nodes)
{
//获取表名字
XmlElement xe = (XmlElement)xnode;
string tableName = xe.GetAttribute("Name").ToString(); //表名字
}
doc.ChildNodes[1].ChildNodes[0].ChildNodes
说明:
doc.ChildNodes的值[0] <?xml version="1.0" encoding="utf-8" ?>
[1] TableLists 根元素节点
读取XML文件(XmlNode和XmlElement区别)的更多相关文章
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 在C#中创建和读取XML文件
1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...
- C#三种常用的读取XML文件的方法
下面我将介绍三种常用的读取XML文件的方法.分别是 1: 使用 XmlDocument 2: 使用 XmlTextReader 3: 使用 Linq to Xml 这里我先创建一个XML文件,名为Bo ...
- 关于XML中:XmlNode和XmlElement的涵义及不同之处
今天学习XML,遇到XmlNode和XmlElement俩个类,故有了下文的所述: 今天在做ASP.NET操作XML文档的过程中,发现了两个类:XmlNode和XmlElement.这两个类的功能极其 ...
- C#读取XML文件的方法
先写一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <bookste> <!-- ...
- unity Android 打包后读取 xml 文件
原地址:http://www.cnblogs.com/wuzhang/p/wuzhang20140731.html 问题: 前天在做东西的过程中发现了一个让人很纠结的问题,为什么Unity 程序 ...
- C#中经常使用的几种读取XML文件的方法
XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...
- (转) 读取xml文件转成List<T>对象的两种方法
读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法. 就以一个简单的xml做例子. xml格 ...
- 使用dom4j 读取XML文件
第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...
随机推荐
- nodejs vinyl-fs 处理文件时输入问题
使用 nodejs vinyl-fs 复制文件时输出路径不对,还是会有原来的相对路径,原因是用了反斜杠“\”,正斜杠“/”没问题 测试过程 node版本: v9.3.0 系统:win10 步骤: 得到 ...
- C#文件监控对象FileSystemWatcher实例,通过监控文件创建、修改、删除、重命名对服务器数据进行实时备份
先上图,简单的windorm界面:此为最初的版本,后续会增加监听多个源目录的功能.log功能.进度条展示功能等. 1.初始化监听 /// <summary> /// 初始化监听 /// & ...
- python远程执行命令
def run(): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...
- hdu4462--曼哈顿距离
题目大意:有N*N个点的田野,然后有k个点是用来放稻草人的,每个稻草人对周围满足曼哈顿距离的庄稼有保护作用 问最小的稻草人的个数能够保护所有庄稼,如果不能保护则输出-1 注意的地方: 1.放稻草人的点 ...
- 听补天漏洞审核专家实战讲解XXE漏洞
对于将“挖洞”作为施展自身才干.展现自身价值方式的白 帽 子来说,听漏洞审核专家讲如何挖掘并验证漏洞,绝对不失为一种快速的成长方式! XXE Injection(XML External Entity ...
- vue项目在IE下报 [vuex] vuex requires a Promise polyfill in this browser问题
如下图所示,项目在IE11下打开报错: 因为使用了 ES6 中用来传递异步消息的的Promise,而IE浏览器都不支持. 解决方法: 第一步: 安装 babel-polyfill . babel-po ...
- Java并发编程实践读书笔记(5) 线程池的使用
Executor与Task的耦合性 1,除非线程池很非常大,否则一个Task不要依赖同一个线程服务中的另外一个Task,因为这样容易造成死锁: 2,线程的执行是并行的,所以在设计Task的时候要考虑到 ...
- git 删除 repository
git 删除 repository 打开版本库,选择要删除的repository 点击Settings 找到删除选项 输入repository name,点击delet…… 删除本地仓库 执行git ...
- 【xsy1611】 数位dp 数位dp
这题是显然的数位$dp$,然而我居然写了一个下午!!! 我们不难想到差分,令$solve(x,y)$表示从第一个数字在区间$[0,x]$,第二个数字在区间$[0,y]$的答案. 不难发现题目中给了你一 ...
- gephi
http://pan.baidu.com/share/link?shareid=382396&uk=1696102437