Welcome

首页 / 软件开发 / C++ / 使用MSXML分析器处理XML文档

使用MSXML分析器处理XML文档2011-04-12Kenn Scribner在 Kenn Scribner 近期有关 XML和MSXML DOM 分析器的文章中,仅介绍了该分析器的部 分功能。这些文章将XML 作为一种技术进行了说明,但是并没有介绍 XML 分析器本身。现在 ,Kenn 将回过头来介绍 MSXML 分析器,并讲解处理 XML 文档和节点所需的基本知识:搜索 特定的节点、插入节点和检索节点值。

MSXML 分析器基于 XML 文档对象模型,对于查看表 1 中所示的各种文档对象来说,它非 常重要。这些对象直接出自 XML 规范本身。MSXML 还可以进一步将XML DOM 对象合并到 COM 中。因此,弄清楚哪个 XML DOM 对象对应于哪个 MSXML COM 接口非常容易。例如, IXMLDOMNode 代表称为 Node 的DOM 对象。

表 1. XML DOM 对象及其用途
DOM 对象用途
DOMImplementation一个查询对象,用于确定 DOM 支持的级别
DocumentFragment表示树的一部分(可进行剪切/粘贴操作)
Document表示树中的顶级节点
NodeList用于访问 XML 节点的Iterator 对象
Node用于扩展带核心 XML 标记的元素
NamedNodeMap命名空间支持和迭代通过属性节点集合
CharacterData文本操作对象
Attr表示元素的属性
Element表示 XML 元素的节点(可用于访问属性)
Text表示给定元素或属性对象的文本内容
CDATASection用于屏蔽 XML 部分,使其不受分析和验证
Notation包含基于 DTD 或架构内的表示法
Entity表示已分析或未分析的实体
EntityReference表示实体引用节点
ProcessingInstruction表示处理指令
虽然有时比较容易混淆,但是 XML 文档对象可以是(并且通常是)多态的。即,“ 节点”同时也是一个“元素”。当您试图确定需要何种 DOM 对象来执行何 种操作时,这有时会造成混淆。可以使用“文档”对象来创建 DOM“节点 ”,但是,如果要向新创建的节点添加属性,就必须通过其作为“元素”的 一面来访问它。如果说存在一种将对象和操作关联在一起的神奇模式,那么我还没能从自己 的日常工作中将它提炼出来。我发现自己仍需要不断参考 MSDN 文档来查看哪个 COM 接口提 供了所需的方法以执行我试图完成的任务。各种对象方法看上去的确是按逻辑分组的,这也 正是我对 DOM 当初的开发模式的推断(通过分组逻辑操作)。

因此,其中的诀窍就在于从 MSXML 分析器检索适当的DOM 对象,这一操作的具体实现就 是 COM 对象。操作的基本模式将是:首先实例化 MSXML COM 对象本身的一个副本,然后从 该副本请求或以其他方式获取指向附加 XML DOM 对象(本身也是 COM 对象)的指针。

MSXML DOM 试验应用程序

创建一个漂亮的应用程序,演示众多的MSXML 功能,这很简单,但实际上,附加的代码只 会画蛇添足。相反,我选择了开发一个简单的基于控制台的应用程序,该应用程序执行四种 基本操作:

从磁盘加载一个 XML 文件。
搜索特定的节点,并向该节点插入一个子节点。
搜索另一个节点,并显示该节点内包含的(文本)值。
将修改后的XML 文档保存回磁盘中。