XMLDOM解析:MSXML与W3C标准解析详解
立即解锁
发布时间: 2025-08-17 01:23:56 阅读量: 2 订阅数: 14 

# XML DOM解析:MSXML与W3C标准解析详解
## 1. Microsoft MSXML DOM增强功能
Microsoft的XML解析器是Internet Explorer 5.5及更高版本的一部分,当前被称为Microsoft XML Core Services,但通常仍以原始的MSXML缩写来称呼。MSXML解析器使用与W3C解析器相同的DOM接口,不过在W3C对象的基础上,它为W3C DOM接口方法和属性添加了一些额外的方法和属性,这些方法和属性通常被称为Microsoft DOM扩展或MSXML扩展。
MSXML扩展可用于IE浏览器应用程序以及其他将MSXML解析器用作DOM解析器的Windows应用程序,但其他解析器(如Xerces)不支持这些扩展。由于MSXML和Internet Explorer应用广泛,大多数XML程序员需要了解Microsoft的这些额外属性和方法。了解哪些方法和属性属于W3C DOM,哪些是MSXML扩展,有助于明确特定解析器中可用的属性和方法以及使用时机。
MSXML下载包中包含一个强大的帮助数据库,其中有关于在JScript、Visual Basic和C/C++中使用MSXML DOM的完整文档和示例。最新的MSXML更新可从[http://www.microsoft.com/msxml](http://www.microsoft.com/msxml)下载。
## 2. DOM接口和节点
以DOM表示的XML文档会被解析为一个由根节点、分支节点和叶子节点组成的树。除了节点之外,一些DOM接口并非DOM节点的扩展,因此不被视为节点“家族”的一部分,并且与某些DOM节点不同,这些DOM接口没有子节点。
MSXML DOM的节点和接口名称并不遵循W3C接口命名标准,尽管这些接口支持大多数W3C属性和方法。例如,W3C的Document节点在MSXML DOM中被称为IXMLDOMDocumentNode,而在W3C DOM中则称为Document。MSXML DOM和W3C DOM的另一个关键区别在于错误处理:W3C DOM的错误处理通过W3C DOMException接口实现,而MSXML的错误处理则通过IXMLDOMDocumentNode的parseError属性实现。
### 2.1 DOM接口列表
| 接口名称 | 描述 | 支持情况 |
| --- | --- | --- |
| DOMImplementation | 定义解析器支持的DOM实现版本以及支持的DOM特性。其hasFeature方法在支持某特性时返回true,否则返回false。 | W3C DOM 1、2、3和MSXML |
| DOMException | 当解析异常发生时,解析器会将异常传递给调用程序,例如尝试修改不可修改的节点或在错误位置添加节点。 | W3C DOM 1、2、3 |
| Node | 是文档对象模型的基础,代表文档树中的单个节点。所有DOM节点都继承自该节点对象的属性和方法。 | W3C DOM 1、2、3和MSXML |
| NodeList | 表示可编辑的内存中Node对象集合,用于包含W3C DOM节点的子节点。节点可通过索引访问。 | W3C DOM 1、2、3和MSXML |
| NamedNodeMap | 表示可通过名称访问的Node对象集合,用于检索具有名称的节点列表。 | W3C DOM 1、2、3和MSXML |
| DOMSelection | 包含由XML路径语言(XPath)表达式返回的节点列表。 | MSXML |
| DOMSchemaCollection | 包含一个或多个Schema文档。 | MSXML |
| CharacterData | 是处理文本的基础对象,CDATASection、Comment和Text节点继承自该对象的属性和方法。 | W3C DOM 1、2、3和MSXML |
### 2.2 DOM节点类型
| 节点名称 | 描述 | 子节点 | 支持情况 |
| --- | --- | --- | --- |
| DocumentType | 表示文档的doctype属性,可引用包含实体引用的DTD,还提供对具有符号属性的元素的接口。 | 无 | W3C DOM 1、2、3和MSXML |
| ProcessingInstruction | 表示文档处理指令,如XML文档声明和样式表引用。 | 无 | W3C DOM 1、2、3和MSXML |
| Document | 表示XML文档,是进入节点树其余部分的根节点。 | Element、ProcessingInstruction、Comment、DocumentType、DocumentFragment | W3C DOM 1、2、3和MSXML |
| DocumentFragment | 表示DOM文档节点树的一部分或可插入文档的新片段。 | Element、ProcessingInstruction、Comment、Text、CDATASection、EntityReference | W3C DOM 1、2、3和MSXML |
| Element | 表示XML文档元素,元素的属性和文本值成为节点树中该元素的子叶节点。 | Element、ProcessingInstruction、Comment、Text、CDATASection、EntityReference | W3C DOM 1、2、3和MSXML |
| Text | 表示Element对象的文本。 | 无 | W3C DOM 1、2、3和MSXML |
| CDATASection | 包含XML文档CDATA元素的内容,作为单个节点,不尝试解析为不同类型的节点。 | 无 | W3C DOM 1、2、3和MSXML |
| Attr | 表示W3C DOM中Element对象的属性。 | Text、EntityReference | W3C DOM 1、2、3(MSXML中为Attribute) |
| Comment | 表示XML文档注释。 | 无 | W3C DOM 1、2、3和MSXML |
| Notation | 包含未解析实体或符号属性值的只读格式,包括应用程序处理指令。 | 无 | W3C DOM 1、2、3和MSXML |
| Entity | 表示已解析或未解析的实体。 | Element、ProcessingInstruction、Comment、Text、CDATASection、EntityReference | W3C DOM 1、2、3和MSXML |
| EntityReference | 表示已解析或未解析的实体引用。 | Element、ProcessingInstruction、Comment、Text、CDATASection | W3C DOM 1、2、3和MSXML |
### 2.3 不同节点集合的用途
- NodeList:包含DOM节点树中单个级别上的子节点列表,其中的节点都没有子节点。
- NamedNodeMap:包含可通过名称访问的节点列表,与节点在节点树中的位置无关。
- DocumentFragment:可表示整个节点树,从Document对象的任何子节点开始。
- DOMSelection和DOMSchemaCollection:仅在MSXML中使用,DOMSelection从XPath表达式返回节点列表,而DOMSchemaCollection可表示一个或多个已解析的XML模式。
## 3. W3C DOM节点类型、常量、节点名称和节点值
表5 - 3列出了所有W3C DOM节点类型及其nodeType、nodeName和nodeValue属性值。
| nodeType | 常量 | nodeName | nodeValue |
| --- | --- | --- | --- |
| 1 | ELEMENT_NODE | 元素名称 | Null |
| 2 | ATTRIBUTE_NODE | 属性名称 | 属性值 |
| 3 | TEXT_NODE | #text | 文本 |
| 4 | CDATA_SECTION_NODE | #cdata - section | CDATA文本 |
| 5 | ENTITY_REFERENCE_NODE | 实体引用名称 | Null |
| 6 | ENTITY_NODE | 实体名称 | Null |
| 7 | PROCESSING_INSTRUCTION_NODE | 目标名称 | 处理指令文本 |
| 8 | COMMENT_NODE | #comment | 注释文本 |
| 9 | DOCUMENT_NODE | #document | Null |
| 10 | DOCUMENT_TYPE_NODE | 文档类型名称 | Null |
| 11 | DOCUMENT_FRAGMENT_NODE | #document - fragment | Null |
| 12 | NOTATION_NODE | 符号名称 | Null |
## 4. MSXML DOM的nodeTypeString属性
MSXML DOM解析器和W3C DOM解析器在处理W3C DOM节点和接口时功能基本相同,但有一个重要例外:由MSXML解析器DOM Node对象创建并继承的DOM节点支持nodeTypeString属性。除了W3C的nodeType和常量值外,还可使用nodeTypeString访问所有节点数据类型。
| nodeType | 常量 | nodeTypeString |
| --- | --- | --- |
| 1 | ELEMENT_NODE | element |
| 2 | ATTRIBUTE_NODE | attribute |
| 3 | TEXT_NODE | text |
| 4 | CDATA_SECTION_NODE | cdatasection |
| 5 | ENTITY_REFERENCE_NODE | entityreference |
| 6 | ENTITY_NODE | entity |
| 7 | PROCESSING_INSTRUCTION_NODE | processinginstruction |
| 8 | COMMENT_NODE | comment |
| 9 | DOCUMENT_NODE | document |
| 10 | DOCUMENT_TYPE_NODE | documenttype |
| 11 | DOCUMENT_FRAGMENT_NODE | documentfragment |
| 12 | NOTATION_NODE | notation |
## 5. DOM节点属性
表5 - 5列出了所有节点数据类型的常见属性。
| 属性 | 属性值 | 支持情况 |
| --- | --- | --- |
| Attributes | 包含当前节点属性列表的NamedNodeMap。 | W3C DOM 1、2、3和MSXML |
| baseName | 返回命名空间的前缀。 | MSXML |
| childNodes | 包含当前节点子节点的NodeList。 | W3C DOM 1、2、3和MSXML |
| dataType | 包含此节点的数据类型文本。 | MSXML |
| Definition | 包含来自DTD或Schema的实体引用定义。 | MSXML |
| firstChild | 当前节点的第一个子节点。 | W3C DOM 1、2、3和MSXML |
| lastChild | 当前节点的最后一个子节点。 | W3C DOM 1、2、3和MSXML |
| localName | 节点的本地名称。 | W3C DOM 2和3 |
| namespaceURI | 返回命名空间的URI。 | W3C DOM 2、3和MSXML |
| nextSibling | 当前节点的下一个兄弟节点。 | W3C DOM 1、2、3和MSXML |
| nodeName | 当前节点的名称。 | W3C DOM 1、2、3和MSXML |
| nodeType | 当前节点类型的编号。 | W3C DOM 1、2、3和MSXML |
| nodeTypedValue | 以指定数据类型表示的节点。 | MSXML |
| nodeTypeString | 表示节点数据类型的文本值。 | MSXML |
| nodeValue | 当前节点的值,也可用于设置属性值。 | W3C DOM 1、2、3和MSXML |
| ownerDocument | 节点树的Document节点。 | W3C DOM 1、2、3和MSXML |
| parentNode | 当前节点的父节点。 | W3C DOM 1、2、3和MSXML |
| parsed | 节点及其子节点的解析状态。 | MSXML |
| prefix | 返回命名空间的前缀。 | W3C DOM 2、3和MSXML |
| previousSibling | 当前节点的上一个兄弟节点。 | W3C DOM 1、2、3和MSXML |
| specified | 指示节点是XML文档中的值还是实体引用的结果。 | MSXML |
| text | 当前节点及其后代的连接文本值。 | MSXML |
| xm
0
0
复制全文
相关推荐










