XML DOM初学者指南(包括验证DTD)[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 x86 的 blog

xml dom初学者指南

作者:董胜涛

总述:本文主要讨论如何利用xmldom访问和维护xml文档,这个xmldom由microsoft 解析器实现。

目录:

简介

dom是什么

如何使用dom

如何load一个文档

处理错误

如何从xml文档中取得信息

如何遍历xml文档

下一步该干什么

简介:

作为vb的开发者你可能会接触extensible markup language (xml)文档。你现在想处理xml文档并把它集成到你的方案中。你可以自己编程解析,把它当普通文本文档处理,但这样作太没有效率了,没有利用xml的强大之处:它可以结构化的表示数据。

从xml文件中获得信息最好的办法是利用xml解析器。解析器,简单的讲,就是一个软件,它可以使xml文件中的数据易于使用。作为vb的开发者,你可能想得到一个支持document object model (dom)的解析器。dom描述了一系列标准的访问xml和html文档的方法,这些方法解析器应该实现。一个支持dom的解析器应该把xml中的数据变成一系列对象,这样就可以对这些对象二次编程。在这篇文章中,你会学习如何利用microsoft 解析器(msxml.dll)实现的dom结构访问和维护xml文档。

在我们继续前进时,让我们先看一段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来验证xml文档的正确性。dtd只是你用来让解析器验证xml文档是否合法的办法的一种,另一个越来越受欢迎的方法是xml schemas,它用xml来描述schemas而不是dtd。与dtd不同的是, schema是用xml来描述的,也就是使用它自己的"有趣的"语法。

下面的文档是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 schemas讨论过深,基于xml-data的xml schema reference已提交给w3c。

dom是什么:

 

xml dom结构将xml文档的内容实现为一个对象模型。w3c的dom level 1 说明定义了dom结构如何实现属性,方法,事件等等。微软的dom实现完全支持w3c标准,并且还有许多使程序更容易访问xml文件的新增特点。

如何使用dom

要使用dom,需要创建一个xml解析器的实例。微软公司在msxml.dll中创建了一系列标准的com接口来使创建实例变得可能。msxml.dll中包含了类型库和可应用的代码,这些你可以用来处理xml文件。如果你使用可实现脚本的客户端,比如vbscript 和ie,你可以使用createobject方法来得到解析器的实例。

set objparser = createobject( "microsoft.xmldom")

如果你使用asp (active server page),你使用server.createobject方法。

set objparser = server.createobject( "microsoft.xmldom" )

如果你在使用vb,你可以创建一个对msxml类型库的引用,这样就可以访问dom。要在vb6.0中使用msxml,操作如下:

  1. 打开project references项
  2. 从com对象中选择microsoft xml, version 2.0,如果你找不到此项,你需要得到它。
  3. 你可以创建一个解析器的实例了。

dim xdoc as msxml.domdocument set xdoc = new msxml.domdocument

你可以通过两个途径获得msxml.dll。

  1. 你可以安装ie5.0,msxml解析器是其中集成的部件。
  2. 或者你可以到相关网站上下载它

一旦你建立了类型库的引用,你就可以执行解析,调入文档,总之,你可以处理xml文档了。

你可能有一些迷惑,我该干些什么?如果你打开msxml库,用visual basic 6.0对象察看器察看其中的对象模型,你会发现很丰富。本文会告诉你如何利用domdocument类和ixmldomnode界面来访问xml文档。

 

如何load一个文档:

要调入一个xml文档,先必须创建一个domdocument的实例。

dim xdoc as msxml.domdocument

set xdoc = new msxml.domdocument

当你获得一个合法的引用,你就可以用load方法来调入一个文档。解析器可以从本地硬盘调入或者通过unc和url从网络上调入。

从硬盘调入如下:

if xdoc.load("c:\my documents\cds.xml") then

' 文档调入成功

' 作我们喜欢作的事

else

' 文档调入失败

end if

当你完成工作,你需要释放掉这个引用,msxml没有直接实现close方法,你最好直接将它设置成nothing来关闭它。

set xdoc = nothing

当你调用一个文档,默认是异步进行,你可以通过修改async属性来更改它。如果你要操作文档,你必须先检查readystate属性来确认文档的状态,它会返回五种可能的结果。

状态

属性值

未初始化:调入文档没有开始

0

调入:load方法正在执行

1

调入完成:load 方法已经完成

2

交互阶段:dom可以进行只读检验,数据部分解析

3

完成:数据完全解析,可以进行读/写操作。 4

本文关键:XML DOM
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top