XmlNode中Value和InnerText的区别
XmlNode中Value和InnerText的区别
这个问题我想很多人在使用.NET 操作 Xml 文档时都遇到过,先看一下MSDN里对这两个属性的解释:
XmlNode.Value:获取或设置节点的值。
XmlNode.InnerText:获取或设置节点及其所有子节点的串联值。
只看这两个定义是不是还是有点迷糊,下面我们用实例来作说明:
1.当操作节点是叶子节点时:
XmlDocument xDoc=new XmlDocument();
xDoc.LoadXml(@"<SmartCoder>
<Coder>
<Name>Tiramisu</Name>
<Age>25</Age>
</Coder>
</SmartCoder>");
XmlNode root=xDoc.DocumentElement;
XmlNode nameNode=root.SelectSingleNode("Coder/Name"); // 获取Name节点
Console.WriteLine(nameNode.Value);
Console.WriteLine(nameNode.InnerText);
输出结果如下:
null
Tiramisu
2.当操作节点是父结点时:
XmlDocument xDoc=new XmlDocument();
xDoc.LoadXml(@"<SmartCoder>
<Coder>
<Name>Tiramisu</Name>
<Age>25</Age>
</Coder>
</SmartCoder>");
XmlNode root=xDoc.DocumentElement;
XmlNode coderNode=root.SelectSingleNode("Coder"); // 获取Name节点
Console.WriteLine(coderNode.Value);
Console.WriteLine(coderNode.InnerText);
输出结果如下:
null
Tiramisu25
3.当操作节点是属性时:
XmlDocument xDoc=new XmlDocument();
xDoc.LoadXml(@"<SmartCoder>
<Coder EnglishName='Benjamin'>
<Name>Tiramisu</Name>
<Age>25</Age>
</Coder>
</SmartCoder>");
XmlNode root=xDoc.DocumentElement;
XmlNode coderNode=root.SelectSingleNode("Coder"); // 获取Name节点
Console.WriteLine(coderNode.Attributes["EnglishName"].Value);
Console.WriteLine(coderNode.Attributes["EnglishName"].InnerText);
或
XmlDocument xDoc=new XmlDocument();
xDoc.LoadXml(@"<SmartCoder>
<Coder EnglishName='Benjamin'>
<Name>Tiramisu</Name>
<Age>25</Age>
</Coder>
</SmartCoder>");
XmlNode root=xDoc.DocumentElement;
XmlNode engNameAttr=root.SelectSingleNode("Coder/@EnglishName"); // 获取Name节点
Console.WriteLine(engNameAttr.Value);
Console.WriteLine(engNameAttr.InnerText);
输出结果:
Benjamin
Benjamin
上文的示例代码中,我们使用了XPath语法来查找DOM元素,更多的XPath语法信息,大家请自行查阅。
从示例中我们可以看出,InnerText会把节点及其子元素的文本内容(尖括号所包含的内容)拼接起来作为返回值;而Value则不然,无论是父节点还是子节点,返回值都为 null ,而当操作的节点类型为属性时,Value的返回值与InnerText相同。其实,Value的返回值,与节点类型(NodeType)相关,下面是MSDN中列出的节点类型及 XmlNode.Value 的返回值:
| 类型 | 值 |
| Attribute | 属性的值 |
| CDATASection | CDATA 节的内容。 |
| Comment | 注释的内容 |
| Document | null |
| DocumentFragment | null |
| DocumentType | null |
| Element | null . 您可以使用 XmlElement.InnerText 或 XmlElement.InnerXml 属性访问元素节点的值。 |
| Entity | null |
| EntityReference | null |
| Notation | null |
| ProcessingInstruction | 全部内容(不包括指令目标)。 |
| Text | 文本节点的内容 |
| SignificantWhitespace | 空白字符。 空白可由一个或多个空格字符、回车符、换行符或制表符组成。 |
| Whitespace | 空白字符。 空白可由一个或多个空格字符、回车符、换行符或制表符组成。 |
| XmlDeclaration | 声明的内容(即在 <?xml 和 ?> 之间的所有内容)。 |
示例1、2中我们获取的节点类型都是 Element ,所以 XmlNode.Value 的返回值是 null。
XmlNode中Value和InnerText的区别的更多相关文章
- 测试开发技术:DOM中 innerHTML、innerText、outerHTML、outerText的区别
测试开发技术:DOM中 innerHTML.innerText.outerHTML.outerText的区别 我们在做web自动化的过程中通过dom处理web页面元素,那么你就要了解innerHT ...
- innerHTML和innerText的区别,以及select元素中怎么取出被选中的option。
一.innerHTML和innerText的区别. 元素.innerHTML = 字符串,是将一对或一个标签所标识的内容全部替换为所赋予的字符串,如果字符串中有标签,浏览器将自动识别其中的标签. 元素 ...
- JS中innerHTML 和innerText和value的区别
(1)innerHTML 和innerText和value的区别: innerHTML innerText是对非表单元素进行操作的. value是对表单元素进行操作的. (2)innerHTML 和i ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- (转)JS中innerHTML,innerText,value
原文:http://holysonll.blog.163.com/blog/static/21413909320134111054352/ JS中innerHTML,innerText,value 2 ...
- html中submit和button的区别(总结) [ 转自欣步同学 ]
html中submit和button的区别(总结) submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证 ...
- 【转】为什么我们都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- Visual Studio 中 Build 和 Rebuild 的区别
因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...
- SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...
随机推荐
- 一个空格也可以让html格式显示大不相同
今天在编写html时出现了bug,有两个标签一直贴近显示,但是两段代码完全一样前一段就没有问题. 错误代码如下 <div id="tool1" style="wid ...
- struts2,登录功能模块实现
功能: ·UserLogin作为控制登录的Action,校验密码成功后记录session,可以选择记住登陆状态,登陆成功后自动跳转到登陆前的URL: ·UserLogout作为控制登录推出的Actio ...
- Jabber Software:Jabber-NET、agsXMPP与Wilefire[转]
本篇介绍两个使用.NET技术,确切的说是使用C#写的Jabber Code Libraries – Jabber.NET.agsXMPP,以及一个Java写的跨平台Jabber Server – Wi ...
- rman全备份异机恢复
一.测试环境 [oracle@localhost ~]$ uname -a Linux localhost.localdomain -.el6.x86_64 # SMP Tue May :: EDT ...
- hdu 2191 珍惜现在,感恩生活 多重背包入门题
背包九讲下载CSDN 背包九讲内容 多重背包: hdu 2191 珍惜现在,感恩生活 多重背包入门题 使用将多重背包转化为完全背包与01背包求解: 对于w*num>= V这时就是完全背包,完全背 ...
- javascript 通用loading动画效果
由于项目中多处要给ajax提交的时候增加等待动画效果,所以就写了一个简单的通用js方法: 代码如下: /*ajax提交的延时等待效果*/ var AjaxLoding = new Object(); ...
- 我的PHP之旅--数据库连接MySQL服务器,添加 删除 查询
PHP连接MySQL服务器 连接MySQL的方法:mysql_connect(); 语法:resource $link = mysql_connect($hostname, $username, $p ...
- CentOS PPTP配置LNMP+PPTP+FreeRADIUS+DaloRADIUS+流量控制
折腾了好几天,查阅了很多资料,终于搞定了,泪牛满面,下面记录详细操作过程!注:测试环境为CENTOS5.8 x86 安装PPTP 直接使用赵蓉的PPTP一键安装包即可 wget http://dl.z ...
- android下拉选择框spinner
spinner是什么东西呢?有点像下拉菜单,其实是一个弹出窗口,但是是可以进行进一步操作的弹出窗口.你点击那个三角形的符号,弹出一个窗口,通常是列表,然后进行操作. 它在xml文件中的定义和其它控件没 ...
- shell 练习
shell 练习 iii= ] do iii=$[$iii+] echo -n "$iii " done iii= ] do iii=$[$iii+] echo -n " ...