XML 文档对象模型 (DOM) 类是 XML 文档的内存中表示形式。 DOM 允许以编程方式读取、作和修改 XML 文档。 XmlReader 类也读取 XML;但是,它提供非缓存、只向前、只读的访问权限。 这意味着,没有功能可以编辑元素的属性或内容的值,或者能够使用 XmlReader 插入和删除节点。 编辑是 DOM 的主要功能。 它是 XML 数据在内存中表示的常见和结构化方式,尽管实际 XML 数据以线性方式存储在文件中或来自另一个对象时。 下面是 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>
下图显示了将此 XML 数据读入 DOM 结构时如何构造内存。
XML 文档结构
在 XML 文档结构中,此图中的每个圆表示一个节点,该节点称为 XmlNode 对象。 XmlNode 对象是 DOM 树中的基本对象。 扩展 XmlNode 的 XmlDocument 类支持对整个文档执行作的方法(例如,将其加载到内存中或将 XML 保存到文件中)。 此外,XmlDocument 还提供了一种查看和操作整个 XML 文档中节点的方法。 XmlNode 和 XmlDocument 都具有性能和可用性增强功能,并具有以下方法和属性:
访问和修改特定于 DOM 的节点,例如元素节点、实体引用节点等。
除了节点包含的信息外,还检索整个节点,例如元素节点中的文本。
节点 对象具有一组方法和属性,以及基本和定义完善的特征。 其中一些特征包括:
节点具有单个父节点,父节点是直接位于其上方的节点。 没有父节点的唯一节点是文档根,因为它是顶级节点,并且包含文档本身和文档片段。
大多数节点可以有多个子节点,即它们正下方的节点。 下面是可以具有子节点的节点类型的列表。
公文
DocumentFragment
实体引用
元素
属性
XmlDeclaration、表示法、实体、CDATASection、Text、Comment、ProcessingInstruction 和 DocumentType 节点没有子节点。
在图示中由 book 节点和 pubinfo 节点表示的同一级别的节点是兄弟节点。
DOM 的一个特征是它如何处理属性。 属性是不属于父子关系和同级关系的节点。 属性被视为元素节点的属性,由名称和值对组成。 例如,如果 XML 数据由与元素format="dollar
关联的price
组成,单词format
是名称,属性format
的值是dollar
。 若要检索format="dollar"
价格节点的属性,请在游标位于元素节点时调用 price
方法。 有关详细信息,请参阅 DOM 中的访问属性。
当 XML 读入内存时,将创建节点。 但是,并非所有节点都是同一类型。 XML 中的元素具有与处理指令不同的规则和语法。 因此,读取各种数据时,会为每个节点分配节点类型。 此节点类型确定节点的特征和功能。
有关内存中生成的节点类型的详细信息,请参阅 XML 节点的类型。 有关在节点树中创建的对象的详细信息,请参阅 将对象层次结构映射到 XML 数据。
Microsoft扩展了万维网联合会 (W3C) DOM 级别 1 和级别 2 中提供的 API,以便更轻松地使用 XML 文档。 虽然完全支持 W3C 标准,但其他类、方法和属性除了可以使用 W3C XML DOM 完成的功能外,还添加了功能。 使用新类可以访问关系数据,从而提供用于与 ADO.NET 数据同步的方法,同时将数据公开为 XML。 有关详细信息,请参阅将 数据集与 XmlDataDocument 同步。
DOM 最适用于将 XML 数据读取到内存中以更改其结构、添加或删除节点,或修改节点保存的数据,如元素包含的文本所示。 然而,在其他场景中,有些类的速度比 DOM 更快。 若要快速、非缓存的仅转发流访问 XML,请使用 XmlReader 和 XmlWriter。 如果需要使用游标模型和 XPath 进行随机访问,请使用 XPathNavigator 类。