XML:XML是一种跨语言,跨平台的数据存储格式,能够在任何两个应用程序间共享数据,这两个程序可能使用不一样的语言编写,由不一样的公司构建,运行在不一样的操做系统上.数据库
XML自己是一个文本文件,用于存储数据的,有人把XML当成小型数据库来使用.编程
DOM:Document Object Model简称为DOM,用W3C的话说,DOM是一种容许程序或脚本动态地访问更新文档内容,结构和样式的,独立于平台和语言的规范化接口.编程语言
通俗的说,DOM就是一种规范.函数
DOM的规范级别:spa
1.DOM级别1(Level 1)操作系统
DOM级别1于1998年10月1日成为W3C推荐标准.专一于HTML和XML文档模型.它含有文档导航和处理功能.对象
2.DOM级别2(Level 2)排序
DOM级别2规范发布于2000年11月13日.DOM级别2对DOM级别1添加了样式表对象模型,并定义了操做附于文档之上的样式信息的功能性.DOM级别2同时还定义了一个事件模型,并提供了对XML命名空间的支持.继承
3.DOM级别3(Level 3)递归
DOM级别3规定了内容模型(DTD和Schemas)和文档验证.同时规定了文档加载和保存,文档查看,文档格式化和关键事件.DOM级别3创建于DOM级别2之上.
DOM的做用:DOM为编程语言提供一组与平台无关的类和接口(API),编程者可使用DOM中的API来对XML进行增,删,改,查的操做.
DOM的地位:DOM处在编程语言和XML文件之间.
使用DOM来解析XML文档,首先DOM解析器会把XML加载到内存,XML文件在内存中以对象树的形式存在,这个对象树模型就是DOM模型.
使用ODM来解析XML文档时,XML中全部的信息在对象树中以树节点(Node)的形式存在.
DOM树中的节点类型主要有五种:
1.元素节点(Element):XML中的元素在DOM树中成为元素节点,节点类型(NodeType)为1;
2.属性节点(Attribute):XML中的属性在DOM树中成为属性节点,节点类型(NodeType)为2;
3.文本节点(Text):XML中的文本在DOM树中成为文本节点,节点类型(NodeType)为3;
4.注释节点(Comments):XML中的注释在DOM树中成为注释节点,节点类型(NodeType)为8;
5.文档节点(Docment):是DOM树的根节点,节点类型(NodeType)为9;
在.NET的System.Xml命名空间中包含了操做XML的类和接口,其中基于DOM操做XML的核心类如表所示:
类名 | 说明 |
XmlDocument | 表示一个XML文档 |
XmlNode | 表示XML文档中的单个节点 |
XmlNodeList | 表示排序的节点集合 |
XmlElement | 表示一个元素 |
XmlAttribute | 表示一个属性 |
XmlAttributeCollection | 表示元素节点的属性集合 |
XmlText | 表示元素或属性的文本内容 |
XmlNode是DOM最关键的一个类,它的实例表示一个DOM树中的一个节点.XmlNode类没有公共构造函数,这表示不能用new关键字建立XmlNode的实例.
1)属性
属性 | 说明 |
Attributes | 若是节点的类型是XmlNodeType.Element,该属性就返回包含元素特性的XmlAttributeCollection(派生于XmlNamedNodeMap),不然返回null. |
ChildNodes | 获取节点中全部子节点的XmlNodeList.若是该节点没有子节点,该属性就返回一个空列表. |
FirstChild | 获取一个XmlNode,表示当前节点的第一个子节点.若是该节点没有子节点,就返回一个null. |
HasChildNode | 获取一个布尔值,表示该节点是否有子节点.若是有子节点,该布尔值就是true,不然就是false. |
InnerText | 表示一个字符串,其值把当前节点及其全部子节点的文本内容链接起来. |
InnerXml | 获取或设置当前节点的子内容标记. |
LastChild | 获取一个XmlNode实例,表示当前节点的最后一个子节点,若是没有这样的节点,就返回一个空引用. |
Name | 当在派生类中被重写时,对不一样的节点类型以字符串形式返回节点的限定名称. |
NextSibling | 该属性返回XmlNode实例,它表示按照文档顺序与当前节点同级(即有相同的深度)的下一节点.若是不存在这样的节点,就返回一个空引用. |
NodeType | 当在派生类中被重写时,获取当前节点的类型,返回一个XmlNodeType值. |
OuterXml | 这个字符串属性递归获取当前节点及其全部子节点的XML标记. |
OwnerDocument | 获取节点所属的XmlDocument实例.若是节点自己是一个文档,该属性就是null. |
ParentNode | 获取XmlNode的父节点,若是没有就返回null. |
PreviousSibling | 获取与当前节点深度相同的前一个XmlNode,若是没有就返回null. |
Value | 获取或设置节点的值. |
2)方法
方法 | 用法 |
AppendChild | 带一个XmlNode类型的参数(或其派生类型),该方法把参数添加到当前节点的子节点列表的末尾.返回值是所添加的节点. |
Clone | 对节点执行深复制(即包含全部的派生节点和属性).该方法没有参数,返回XmlNode副本,等价于CloneNode(true). |
CloneNode | 这是一个抽象方法,它复制当前节点. |
InsertAfter | 在给定引用节点的子节点列表中,在该引用节点的后面插入一个节点.该方法带两个XmlNode类型的参数:一个是要添加的子节点,另外一个是引用节点. |
InsertBefore | 与InsertAfter类型,但新节点在引用节点的前面插入(除非引用节点为null,此时节点添加到子节点列表的最后). |
PrependChild | 把一个节点添加到该节点的子节点列表的开头. |
RemoveAll | 删除调用节点的全部子节点和/或特性. |
RemoveChild | 删除指定的子节点,该方法带一个XmlNode类型的参数,删除成功就返回该节点. |
ReplaceChild | 用一个新节点代替一个子节点,返回旧(被替换的)节点. |
XmlDocument类派生自XmlNode类.其实例表示一个Xml文档对象.XmlDocument类有许多用途.它不只能够执行DOM模型中全部外围结构的接口,还能够建立新节点.
1)属性
属性 | 说明 |
DocumentElement(只读) | 返回组成DOM树中根的XmlElement. |
DocumentType(只读) | 把DOCTYPE声明(若是有)返回一个XmlDocumentType对象 |
PreserveWhitespace | 这个布尔属性控制着在执行Load,LoadXml和Save过程当中是否保留空白. 若是在执行这些操做中的任何一个以前,该布尔属性是true,就保留空白. |
2)方法
方法 | 说明 |
CreateAttribute | 用给定的名称建立一个XmlAttribute节点. |
CreateElement | 建立一个XmlElement节点. |
CreateNode | 根据给出的类型,名称和命名空间信息,建立并返回一个XmlNode. |
CreateTextNode | 根据一个包含新节点中文本内容的字符串,建立并返回一个XmlText节点. |
CreateXmlDeclaration | 根据下面的参数建立一个XmlDeclaration节点. |
GetElementById | 返回一个匹配给定字符串ID参数的XmlElement. |
GetElementByTagName | 返回一个XmlNodeList,其中包含其名称匹配给定名称的全部子元素. |
Load | 加载一个XML文档,并解析它. |
LoadXml | 从字符串中加载XML文档.这个字符串参数由文档标记组成. |
Save | 把XML文档写到给定的位置上. |
XMLNodeList是一个节点集合类,其元素为XmlNode类型.XmlNodeList没有公共构造函数,所以不能建立和删除XmlNodeList类的实例.得到XmlNodeList实例最经常使用的方式是引用XmlNode的ChildNodes属性.
1)属性
属性 | 说明 |
Count | 获取XmlNodeList中的节点数 |
ItemOf(只读) | 检索给定索引处的节点 |
方法 | 用法 |
GetEnumerator | 该方法没有参数,返回一个IEnumerator实例.以支持在列表上执行foreach迭代. |
Item | 该方法带一个基于0的整数索引参数,返回列表中该索引所在位置的XmlNode.若是索引超出列表的范围,该方法就返回null. |
属性 | 说明 |
Attributes | 获取一个XmlAttributeCollection,其中包含该元素节点的全部属性. |
ClildNodes | 获取元素节点的全部子节点.(继承自XmlNode). |
HasAttributes | 获取一个boolean值,该值指示当前元素节点是否有任何属性. |
HasChildNodes | 获取一个值,该值指示节点是否有任何子节点.(继承自XmlNode). |
InnerText | 获取或设置节点及其全部子级的串连值.(重写XmlNode.InnerText). |
InnerXml | 获取或设置只表示此节点子级的标记.(重写XmlNode.InnerXml). |
IsEmpty | 获取或设置一个布尔值.当该值为true时,元素就是空的,并以<name />缩写形式表示.若是元素是子内容或以完整形式<name><name/>表示, 则该属性返回false.若是这个属性设置为true,就删除它的全部子内容,由于这将指定该元素应为空. |
LastChild | 获取元素节点的最后一个子级.(继承自XmlNode). |
Name | 获取元素节点的限定名.(重写XmlNode.Name). |
NextSibling | 获取这个元素节点后面的XmlNode,若是不存在这样的节点,该属性就返回null. |
NodeType | 获取当前元素节点的类型.(重写XmlNode.NodeTye).返回XmlNodeType.Element. |
OwnerDocument | 获取该元素节点所属的XmlDocument(重写XmlNode.OwnerDocument). |
PreviousSibling | 获取紧接在该元素节点以前的节点.(继承自XmlLinkedNode). |
Value | 获取或设置元素节点的值.(继承自XmlNode). |
方法 | 说明 |
AppendChild | 将指定的节点添加到该节点的子节点列表的末尾.(继承自XmlNode). |
CloneNode | 复制属性,并把副本返回为一个XmlNode实例.该方法带一个布尔参数(该参数为true时,会递归复制子内容,进行深复制, 该参数为false时,则仅复制元素). |
GetAttribute | 返回指定属性的属性值. |
GetAttributeNode | 与GetAttribute相似(包括重载的参数列表),但若是找到匹配,返回类型是XmlAttribute,若是没有找到匹配,则返回null. |
GetElementsByTagName | 返回一个XmlNodeList,它包含与指定名称匹配的全部子代元素的列表. |
HasAttribute | 肯定当前节点是否具备指定的属性. |
RemoveAll | 移除当前节点的全部指定属性和子级.不移除默认属性.(重写XmlNode.RemoveAll()). |
RemoveAttribute | 移除指定的属性. |
RemoveAttributeAt | 从元素中移除具备指定索引的属性节点. |
RemoveAttributeNode | 从元素中删除并返回XmlAttribute. |
RemoveChild | 移除指定的子节点.(继承自XmlNode). |
ReplaceChild | 用newChild节点替换子节点oldChild.(继承自XmlNode). |
SetAttribute | 设置指定属性的值. |
SetAttributeNode | 添加一个新XmlAttribute. |
XmlAttribute是System.Xml命名空间中最经常使用的DOM类之一.它也直接派生自XmlNode,是惟一适合于表示XML属性的类.
1)属性
属性 | 含义 |
Name | 把属性节点的限定名称返回为一个字符串. |
NodeType | 获取一个XmlNodeType枚举,其值为XmlNodeType.Attribute. |
NextSibling | 获取紧接在该节点以后的节点.(继承自XmlNode). |
OwnerDocument | 获取这个特性所属的XmlDocument. |
OwnerElement | 获取该属性所属的XmlElement. |
PreviousSibling | 获取紧接在该属性节点以前的节点.(继承自XmlNode). |
Value | 获取或设置节点的值.(重写XmlNode.Value). |
2)方法
XmlAttribute类的Clone()方法能够建立此属性节点的一个副本.
XmlAttributeCollection表示能够按名称或索引访问的属性的集合,其元素为XmlAttribute类型.该类派生自XmlNameNodeMap类.
1)属性
这个类的最经常使用的属性是Count.这是一个只读整数属性,用于获取集合所包含的XmlAttribute节点数.
2)方法
方法 | 说明 |
Append | 将指定的属性插入集合,并将其做为集合中的最后一个节点. |
GetEnumerator | 提供一个IEnumerator实例,以支持在映射内容上执行foreach的枚举. |
InsertAfter | 将指定属性直接插入到指定引用属性以后. |
InsertBefore | 将指定属性直接插入到指定引用属性以前. |
Item | 检索位于XmlNamedNodeMap中指定索引处的节点.(继承自XmlNamedNodeMap). |
Prepend | 将指定属性插入集合中,并将其做为集合的第一个节点. |
Remove | 从集合中移除指定的属性. |
RemoveAll | 从集合中移除全部属性. |
RemoveAt | 从集合中移除与指定的索引对应的属性. |
RemoveNamedItem | 从映射中删除指定的节点,该方法有两个重载形式,它们分别匹配GetNamedItem的两个不一样版本. |
SetNamedItem | 在集合中插入所提供的XmlNode实例.若是传送过来的节点已经在映射中(就是修改节点的内容), 就返回旧(被替代的)节点.若是节点是新的,就返回null. |
XmlText表示元素节点或属性节点的文本内容.该类没有构造方法,但可使用XmlNode的CreateTextNode()方法获得实例.
1)属性
XmlText的Length属性能够获取数据的长度(以字符为单位).(从XmlCharacterData继承).XmlText的Value属性用于获得文本节点的位置.