一.DOM简介

1.什么是DOM

  XML:XML是一种跨语言,跨平台的数据存储格式,可以在任何两个应用程序间共享数据,这两个程序可能使用不同的语言编写,由不同的公司构建,运行在不同的操作系统上.

      XML本身是一个文本文件,用于存储数据的,有人把XML当成小型数据库来使用.

  DOM:Document Object Model简称为DOM,用W3C的话说,DOM是一种允许程序或脚本动态地访问更新文档内容,结构和样式的,独立于平台和语言的规范化接口.

     通俗的说,DOM就是一种规范.

  DOM的规范级别:

    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之上.

2.DOM的作用和地位

  DOM的作用:DOM为编程语言提供一组与平台无关的类和接口(API),编程者可以使用DOM中的API来对XML进行增,删,改,查的操作.

  DOM的地位:DOM处在编程语言和XML文件之间.

 3.DOM模型

  使用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中的DOM常用对象

  在.NET的System.Xml命名空间中包含了操作XML的类和接口,其中基于DOM操作XML的核心类如表所示:

.NET中基于DOM核心类
类名 说明
XmlDocument 表示一个XML文档
XmlNode 表示XML文档中的单个节点
XmlNodeList 表示排序的节点集合
XmlElement 表示一个元素
XmlAttribute 表示一个属性
XmlAttributeCollection 表示元素节点的属性集合
XmlText 表示元素或属性的文本内容

  1.XmlNode类

      XmlNode是DOM最关键的一个类,它的实例表示一个DOM树中的一个节点.XmlNode类没有公共构造函数,这表示不能用new关键字创建XmlNode的实例.

       1)属性

XmlNode类常用属性及说明
属性 说明
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 用一个新节点代替一个子节点,返回旧(被替换的)节点.

  2.XmlDocument类

      XmlDocument类派生自XmlNode类.其实例表示一个Xml文档对象.XmlDocument类有许多用途.它不仅可以执行DOM模型中所有外围结构的接口,还可以创建新节点.

        1)属性

XmlDocument的常用属性
属性 说明
DocumentElement(只读) 返回组成DOM树中根的XmlElement.
DocumentType(只读) 把DOCTYPE声明(如果有)返回一个XmlDocumentType对象
PreserveWhitespace

这个布尔属性控制着在执行Load,LoadXml和Save过程中是否保留空白.

如果在执行这些操作中的任何一个之前,该布尔属性是true,就保留空白.

        2)方法

XmlDocument的常用方法
方法 说明
CreateAttribute 用给定的名称创建一个XmlAttribute节点.
CreateElement 创建一个XmlElement节点.
CreateNode 根据给出的类型,名称和命名空间信息,创建并返回一个XmlNode.
CreateTextNode 根据一个包含新节点中文本内容的字符串,创建并返回一个XmlText节点.
CreateXmlDeclaration 根据下面的参数创建一个XmlDeclaration节点.
GetElementById 返回一个匹配给定字符串ID参数的XmlElement.
GetElementByTagName 返回一个XmlNodeList,其中包含其名称匹配给定名称的所有子元素.
Load 加载一个XML文档,并解析它.
LoadXml 从字符串中加载XML文档.这个字符串参数由文档标记组成.
Save 把XML文档写到给定的位置上.

  3.XmlNodeList类

      XMLNodeList是一个节点集合类,其元素为XmlNode类型.XmlNodeList没有公共构造函数,因此不能创建和删除XmlNodeList类的实例.获得XmlNodeList实例最常用的方式是引用XmlNode的ChildNodes属性.

        1)属性

XmlNodeList的属性
属性 说明
Count 获取XmlNodeList中的节点数
ItemOf(只读) 检索给定索引处的节点

 

 

XmlNodeList的方法
方法 用法
GetEnumerator 该方法没有参数,返回一个IEnumerator实例.以支持在列表上执行foreach迭代.
Item 该方法带一个基于0的整数索引参数,返回列表中该索引所在位置的XmlNode.如果索引超出列表的范围,该方法就返回null.

 

 

 

 

XmlElement的常用属性
属性 说明
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).

 

 

Xmlelement的常用方法
方法 说明
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.

  5.XmlAttribute类

      XmlAttribute是System.Xml命名空间中最常用的DOM类之一.它也直接派生自XmlNode,是唯一适合于表示XML属性的类.

        1)属性

XmlAttribute的常用属性
属性 含义
Name 把属性节点的限定名称返回为一个字符串.
NodeType 获取一个XmlNodeType枚举,其值为XmlNodeType.Attribute.
NextSibling 获取紧接在该节点之后的节点.(继承自XmlNode).
OwnerDocument 获取这个特性所属的XmlDocument.
OwnerElement 获取该属性所属的XmlElement.
PreviousSibling 获取紧接在该属性节点之前的节点.(继承自XmlNode).
Value 获取或设置节点的值.(重写XmlNode.Value).

        2)方法

          XmlAttribute类的Clone()方法可以创建此属性节点的一个副本.

  6.XmlAttributeCollection类

      XmlAttributeCollection表示可以按名称或索引访问的属性的集合,其元素为XmlAttribute类型.该类派生自XmlNameNodeMap类.

        1)属性

          这个类的最常用的属性是Count.这是一个只读整数属性,用于获取集合所包含的XmlAttribute节点数.

        2)方法

XmlAttributeCollection的常用方法
方法 说明
Append 将指定的属性插入集合,并将其作为集合中的最后一个节点.
GetEnumerator 提供一个IEnumerator实例,以支持在映射内容上执行foreach的枚举.
InsertAfter 将指定属性直接插入到指定引用属性之后.
InsertBefore 将指定属性直接插入到指定引用属性之前.
Item 检索位于XmlNamedNodeMap中指定索引处的节点.(继承自XmlNamedNodeMap).
Prepend 将指定属性插入集合中,并将其作为集合的第一个节点.
Remove 从集合中移除指定的属性.
RemoveAll 从集合中移除所有属性.
RemoveAt 从集合中移除与指定的索引对应的属性.
RemoveNamedItem 从映射中删除指定的节点,该方法有两个重载形式,它们分别匹配GetNamedItem的两个不同版本.
SetNamedItem

在集合中插入所提供的XmlNode实例.如果传送过来的节点已经在映射中(就是修改节点的内容),

就返回旧(被替代的)节点.如果节点是新的,就返回null.

  7.XmlText类

      XmlText表示元素节点或属性节点的文本内容.该类没有构造方法,但可以使用XmlNode的CreateTextNode()方法得到实例.

        1)属性

          XmlText的Length属性可以获取数据的长度(以字符为单位).(从XmlCharacterData继承).XmlText的Value属性用于得到文本节点的位置.