关于什么是XML,以及XML有什么作用,网络上很多,我就在这里不班门弄斧,写博客,是我的一个习惯,究其内容无非个人情感,心得体会,转载,技术相关的,或者一时心血来潮的个人之谈,但是我是一个小心翼翼的人,唯恐博文中出现什么纰漏差错,误导大家,被贻笑大方,但是我相信,无论对错,都会引起大家的共鸣,没有错误也是在所难免,毕竟水平有限,但是我尽力。

<?xml version="1.0" encoding="utf-8" ?>
<StudentList>
<Student id="1">
<Name>Tim</Name>
</Student>
<Student id="2">
<Name>Tom</Name>
</Student>
<Student id="3">
<Name>Vina</Name>
</Student>
<Student id="4">
<Name>Emily</Name>
</Student>
</StudentList>

上面的是我的一个例子,我的目的是要读取Tim这个值,我们先来分析一下Tim包含在id为1的Student元素的Name节点内,但是当我用下面的代码读取的时候去出现了错误。

  XmlDocument pXMLDoc = new XmlDocument();

            pXMLDoc.Load(@"XMLTest.xml");
XmlNode XrootNode = pXMLDoc.SelectSingleNode("StudentList"); string N1 = XrootNode.ChildNodes[0].Attributes[0].Name; string N2 = XrootNode.ChildNodes[0].Attributes[0].Value;
string N3 = XrootNode.ChildNodes[0].ChildNodes[0].Value;

N3就是我预想的值,但是获取后发现这个值是null,也就是说出现了问题,当然问题肯定是出现的我的身上,想了想,将最后一句换成下面这句就可以

  string N3 = XrootNode.ChildNodes[0].ChildNodes[0].InnerText;

关于InnerText,MSDN上有详细的说明:

获取或设置节点及其所有子节点的串联值(http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnode.innertext.aspx)。 我们不难看出所谓的innerText是将从该节点以及其子节点的所有值连接在一起。也就是说InnerText的值不一定就是我们想要的值,MSDN上也说了:对于叶节点,InnerText 与 Value 属性返回相同的内容。

这里其实有一个概念我一直没搞清,我开始的时候就以为Tim就是Name节点的值,其实错了,Tim也是一个节点也就是MSDN上所说的叶节点,所以可以通过下面的代码也可以获取正确的值。

  XmlDocument pXMLDoc = new XmlDocument();

            pXMLDoc.Load(@"XMLTest.xml");
XmlNode XrootNode = pXMLDoc.SelectSingleNode("StudentList"); string N1 = XrootNode.ChildNodes[].Attributes[].Name; string N2 = XrootNode.ChildNodes[].Attributes[].Value; string N3 = XrootNode.ChildNodes[].ChildNodes[].ChildNodes[].Value;

在XML中有很多节点,只不过类型不同而已,对于下面的这个例子:

<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>

我们可以分析其DOM树,如下图:

在MSDN中对Nodel类型有很详细的描述(http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnodetype(VS.95).aspx)

成员


  成员名称 说明
None 如果未调用 Read 方法,则由 XmlReader 返回。
Element 元素(例如,<item>)。

Element 节点可以具有以下子节点类型:Element、Text、Comment、ProcessingInstruction、CDATA 和 EntityReference。 它可以是 Document、DocumentFragment、EntityReference 和 Element 节点的子级。

Attribute 属性(例如,id='123')。

Attribute 节点可以具有以下子节点类型:Text 和 EntityReference。 Attribute 节点不以任何其他节点类型子节点的形式出现。 不将其视为 Element 的子节点。

Text 节点的文本内容。

Text 节点不能具有任何子节点。 它可以以 Attribute、DocumentFragment、Element 和 EntityReference 节点的子节点的形式出现。

CDATA CDATA 节(例如,<![CDATA[my escaped text]]>)。

CDATA 节用于转义否则将被识别为标记的文本块。 CDATA 节点不能有任何子节点。 它可以以 DocumentFragment、EntityReference 和 Element 节点子级的形式出现。

EntityReference 实体引用(例如,&num;)。

EntityReference 节点可以具有以下子节点类型:Element、ProcessingInstruction、Comment、Text、CDATA 和 EntityReference。 它可以以 Attribute、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。

Entity 实体声明(例如,<!ENTITY...>)。

Entity 节点可以具有表示已展开实体的子节点(例如 Text 和 EntityReference 节点)。 它可以以 DocumentType 节点子级的形式出现。

ProcessingInstruction 处理指令(例如,<?pi test?>)。

ProcessingInstruction 节点不能具有任何子节点。 它可以以 Document、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。

Comment 注释(例如,<!-- my comment -->)。

Comment 节点不能有任何子节点。 它可以以 Document、DocumentFragment、Element 和 EntityReference 节点子级的形式出现。

Document 作为文档树的根的文档对象提供对整个 XML 文档的访问。

Document 节点可以具有以下子节点类型:XmlDeclaration、Element(最多一个)、ProcessingInstruction、Comment 和 DocumentType。 它不能以任何节点类型子级的形式出现。

DocumentType 由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。

DocumentType 节点可以具有以下子节点类型:Notation 和 Entity。 它可以以 Document 节点子级的形式出现。

DocumentFragment 文档片段。

DocumentFragment 节点将节点或子树与文档关联起来,而实际上并不包含在该文档中。 DocumentFragment 节点可以具有以下子节点类型:Element、ProcessingInstruction、Comment、Text、CDATA 和 EntityReference。 它不能以任何节点类型子级的形式出现。

Notation 文档类型声明中的表示法(例如,<!NOTATION...>)。

Notation 节点不能具有任何子节点。 它可以以 DocumentType 节点子级的形式出现。

Whitespace 标记间的空白。
SignificantWhitespace 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。
EndElement 末尾元素标记(例如,</item>)。

XmlReader 到达元素的末尾时,返回 EndElement 节点。

EndEntity 由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。
XmlDeclaration XML 声明(例如,<?xml version='1.0'?>)。

XmlDeclaration 节点必须是文档中的第一个节点。 它不能具有子级。 它是 Document 节点的子级。 它可以具有提供版本和编码信息的属性。

希望通过这个简短的描述和我自己对XML的认识给大家带来帮助。

推荐博客:C# 解析XML http://blog.csdn.net/itwit/article/details/6689313

CDATA C# 操作 http://www.cnblogs.com/xyzhuzhou/archive/2012/08/29/2661840.html

重温XML的更多相关文章

  1. 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)

    解剖SQLSERVER 第十篇  OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...

  2. 【转】以XML文件方式保存用户数据——2013-08-25 22

    正在做项目中有很多游戏数据要保存,常见的玩家数据这些比较简单的可以用CCUserDefault.它是cocos2d-x用来存取基本数据类型用的.保存为XML文件格式. 主要方法:(和java的map很 ...

  3. XML随笔:语法快速入门及当下流行的RSS简析

    今天是本人第一次写博客,之前闭门造车闹出过很多笑话,恰巧这几天刚刚重温了一遍XML的知识,决定把XML的知识再来从头到尾的理一遍,感触颇多,今天分享给大家.希望大家能多多注意其中的要点. 1.定义 首 ...

  4. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  5. 重温ASP.NET WebAPI(一)初阶

    重温ASP.NET WebAPI(一)初阶   前言 本文为个人对WebApi的回顾无参考价值.主要简单介绍WEB api和webapi项目的基本结构,并创建简单地webaapi项目实现CRUD操作. ...

  6. Ui"三重天"之重温Uiaumator(1)

    移动端自动化技术和接口自动化技术是接下来需要深究和拓展的两方面,基于之前的薄弱基础,重温一波,本篇内容便是android UI自动化框架Uiautomantor1. 介于对移动端自动化并没有实际应用的 ...

  7. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    重温.NET下Assembly的加载过程   最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后 ...

  8. Android基础夯实--重温动画(二)之Frame Animation

    心灵鸡汤:天下事有难易乎,为之,则难者亦易矣:不为,则易者亦难矣. 摘要 当你已经掌握了Tween Animation之后,再来看Frame Animation,你就会顿悟,喔,原来Frame Ani ...

  9. Android基础夯实--重温动画(一)之Tween Animation

    心灵鸡汤:真正成功的人生,不在于成就的大小,而在于你是否努力地去实现自我,喊出自己的声音,走出属于自己的道路. 摘要 不积跬步,无以至千里:不积小流,无以成江海.学习任何东西我们都离不开扎实的基础知识 ...

随机推荐

  1. Oracle存储过程学习使用

    存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...

  2. [PR & ML 2] [Introduction] Example: Polynomial Curve Fitting

    啊啊啊,竟然不支持latex,竟然HTML代码不能包含javascript,代码编辑器也不支持Matlab!!!我要吐槽博客的编辑器...T_T只能贴图凑合看了,代码不是图,但这次为了省脑细胞,写的不 ...

  3. 客户调用COM流程

    参考:COM技术内幕 DllGetClassObjecthttps://msdn.microsoft.com/en-us/library/windows/desktop/ms680760.aspx   ...

  4. Linux下UDP收/发广播消息简单实现

    发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...

  5. msSQL数据库备份还原小结

    MSSQL自带了一个样例数据库pubs,就拿这个举例好了. 首先,来一次完全备份.对于数据量很大的数据库,这样的操作当然很费时间.所以我们采用每天凌晨4点一次完全备份,每个小时一个差异备份,每分钟一次 ...

  6. Windows Phone 8 开发初体验

    Windows Phone 8 是当前除了Android.IPhone之外,第3大智能手机运行平台.作为微软技术的忠实fans,一直关注和跟进微软技术的最新进展.这里就给大家简单介绍一下,如何进行Wi ...

  7. javaweb——总结

    day01XML上    1.XML的作用    2.XML的基本语法    3.DTD约束    4.DTD的基本语法(看懂DTD就ok)    5.XML的解析方式:原理    6.JAXP的DO ...

  8. jsonp使用规范

    这两天花了很多时间弄研究jsonp这个东西, 可是无论我怎么弄..TMD就是不进入success函数,并且一直进入error函数...让我着实DT啊. 可以看下我之间的提问(这就是我遇到的烦恼).. ...

  9. HTML5元素拖拽实现示例

    HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...

  10. VS2010开发环境最佳字体及配色方法

    Fixedsys Excelsior 3.01 1. 首先下载字体:http://www.fixedsysexcelsior.com/   脚本之家字体下载 2. 安装字体:control panel ...