brian randell
developmentor
1999 年 10 月
摘要:本文讨论当 xml 文档被 microsoft(r) xml parser 显露之后,如何通过执行 xml dom 来访问和操作 xml 文档。(共 10 页)
目录
前言
dom 的确切定义是什么?
如何使用 xml dom?
如何加载文档?
处理故障
在 xml 文档中检索信息
如何在文档中来回移动?
现在做什么?
前言
假如您是 visual basic(r) 开发人员,您收到一些“可扩展的标记语言 (xml)” 文档格式的数据。此时您一定希望得到 xml 文档中的信息,并将这些数据结合到 visual basic 的解决方案中。您必然会自己编写代码来分析 xml 文件的内容,该文件不过是个文本文件而已。但这决不是多快好省的办法,而且抹煞了 xml 的优点:表现数据的结构化方法。
检索 xml 文件中的信息的较好方法是使用 xml 分析程序。十分简单,xml 分析程序是个软件,它读 xml 文件并使其中的数据成为可用的。作为 visual basic 的开发人员,希望使用支持 xml“文档对象模型 (dom)”的分析程序。dom 定义了分析程序应当显露的标准命令集,使您能够在程序中访问 html 和 xml 文档内容。支持 dom 的 xml 分析程序取出 xml 文档中的数据,并通过一组可以对它编程的对象来显露它。在这篇文章中,您将学会当 xml 文档被 microsoft(r) xml parser 显露之后,如何通过执行 xml dom 来访问和操作它 (msxml.dll)。
在往下阅读之前,应当看一下原始的 xml 文件,以便对分析程序如何使您的生活更加轻松有个概念。下面的代码显露了含有压缩盘项目的文件 cds.xml 的内容。每一项都含有诸如艺术家、标题和曲目等信息。
<?xml version="1.0"?>
<!doctype compactdiscs system "cds.dtd">
<compactdiscs>
<compactdisc>
<artist type="individual">frank sinatra</artist>
<title numberoftracks="4">in the wee small hours</title>
<tracks>
<track>in the wee small hours</track>
<track>mood indigo</track>
<track>glad to be unhappy</track>
<track>i get along without you very well</track>
</tracks>
<price>$12.99</price>
</compactdisc>
<compactdisc>
<artist type="band">the offspring</artist>
<title numberoftracks="5">americana</title>
<tracks>
<track>welcome</track>
<track>have you ever</track>
<track>staring at the sun</track>
<track>pretty fly (for a white guy)</track>
</tracks>
<price>$12.99</price>
</compactdisc>
</compactdiscs>
以上文档的第二行涉及外部的 dtd,或者叫做“文档类型定义”文件。dtd 定义了特定类型 xml 文档的布局和预期内容。xml 分析程序可以使用 dtd 来确定文档是否有效。dtd 仅是一种方法,可以使用它帮助分析程序验证文档。还有一个越来越流行的验证文档的方法就是“xml 架构”。和 dtd 不同的是,我们使用 xml 定义架构,而 dtd 则使用它们自己“有趣的”语法。
下面的代码显示了 cds.xml 使用的 cds.dtd 的内容:
<!element compactdiscs (compactdisc*)>
<!element compactdisc (artist, title, tracks, price)>
<!entity % type "individual | band">
<!element artist (#pcdata)>
<!attlist artist type (%type;) #required>
<!element title (#pcdata)>
<!attlist title numberoftracks cdata #required>
<!element tracks (track*)>
<!element price (#pcdata)>
<!element track (#pcdata)>
这篇文章并不打算深入探讨 dtd 和“xml 架构”。xml 架构语言(英文)是基于 xml 数据(英文)
注释(符合 w3c)的。
dom 的确切定义是什么?
xml 的 dom 是个对象模型,它显露 xml 文档的内容。w3c 的文档对象模型 (dom) 1 级规格 通常定义了 dom 应当显露为什么属性、方法和事件。microsoft 的 dom 执行方法完全支持 w3c 标准,它的一些其他特性更便于在程序中使用 xml 文件。
如何使用 xml dom?
通过创建 xml 分析程序的实例来使用 xml dom。为此,microsoft 通过 msxml.dll 中的一组标准 com 界面来显露 xml dom。msxml.dll 含有使用 xml 文档时用到的类库和执行代码。如果您正在使用有脚本的客户程序,如 internet explorer 中的 vbscript 执行,则通过用 createobject 方法创建分析程序对象的实例,来使用 dom。
set objparser = createobject( "microsoft.xmldom" )
如果您正在使用来自 active server page(asp) 的 vbscript,则应当使用 server.createobject。
set objparser = server.createobject( "microsoft.xmldom" )
如果您正在使用 visual basic,可以通过设置对 msxml 类库(在 msxml.dll 中提供)的引用来访问 dom。从 visual basic 6.0 内部使用 msxml 的步骤为:
- 打开工程引用对话框。
- 从可用的 com 对象的列表中选择 microsoft xml,v2.0。如果没有找到该项,则先要获得 msxml 类库。
- 这时可以创建分析程序对象实例。
dim xdoc as msxml.domdocument
set xdoc = new msxml.domdocument
从何处可以找到 msxml.dll?获得 msxml 类库的办法有两种:
在 visual basic 项目中引用了类库之后,就可以调用分析程序,加载文档,使用文档中的数据。
也许您现在正在疑惑—;我现在使用的是什么?如果您打开了 msxml 类库,并用 visual basic 6.0 对象浏览器检查它的对象模型,就会发现,对象模型是如此丰富。这篇文章示范了如何使用 domdocument 类和 ixmldomnode 接口来访问 xml 文档。
图 1. msxml 分析程序对象模型
如何加载文档?
要加载 xml 文档,首先必须创建 domdocument 类的实例:
dim xdoc as msxml.domdocument
set xdoc = new msxml.domdocument
当获得了有效的引用之后,使用加载方法打开文件。msxml 分析程序能从本地磁盘上加载 xml 文档,在网上则用 unc 引用或通过 url 加载文档。
若要从磁盘加载文档,请使用加载方法创建下面的构造:
if xdoc.load("c:\my documents\cds.xml") then
' 文档加载成功。
' 现在做一些有趣的事情。
else
' 文档加载不成功。
end if
用完该文档之后,需要将您的对象引用释放给它。msxml 分析程序并不显露明确的关闭方法。最好的方法是将引用明确设置为nothing。
set xdoc = nothing
当要求分析程序加载文件时,在默认情况下,它是非同步执行的。改变该文档的布尔 async 属性可以改变这个特性。重要的是检查文档的 readystate 属性,保证文档在开始检查它的内容之前就已经就绪。readystate 属性可能返回的值为下列 5 种之一: