`
Eric_2007
  • 浏览: 24470 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

XML DOM 初学者指南

    博客分类:
  • DOM
阅读更多

XML DOM 初学者指南

http://www.yellowsheepriver.com/memberarea/infor/php/html/001/03html/001/0006.htm

 

总述:本文主要讨论如何利用XMLDOM访问和维护XML文档,该XMLDOMMicrosoft 解析器实现。

简介

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

XML文件中获得信息最好的办法是利用XML解析器。解析器,简单的讲,就是一个软件,它可以使XML文件中的数据易于使用。作为VB的开发者,你可能想得到一个支持Document Object Model (DOM)的解析器。DOM描述了一系列标准的访问XMLHTML文档的方法,这些方法解析器应该实现。一个支持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>

 

DOM是什么

XML DOM结构将XML文档的内容实现为一个对象模型。W3CDOM 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,操作如下:

打开Project References

COM对象中选择Microsoft XML, version 2.0,如果你找不到此项,你需要得到它。

你可以创建一个解析器的实例了。

Dim xDoc As MSXML.DOMDocument

Set xDoc = New MSXML.DOMDocument

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

你可以安装IE5.0MSXML解析器是其中集成的部件。

或者你可以到相关网站上下载它

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

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

 

如何Load一个文档

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

Dim xDoc As MSXML.DOMDocument

Set xDoc = New MSXML.DOMDocument

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

从硬盘调入如下:

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

MSXML解析器实现了一些有用的方法,你在调入一个大的文档时可以用这些方法追踪调入过程的状态。这些方法对从Internet上异步的调入文档也很有帮助。

要打开一个Internet上的文档,你需要提供绝对URL,并且必须加http://前缀。下面是一个例子。

xDoc.async = False

If xDoc.Load("http://www.develop.com/hp/brianr/cds.xml") Then

文档调入成功

作我们喜欢作的事

Else

文档调入失败

End If

Async属性设置为False,这样在文档调入完成之前,解析器不会将控制权交给你的代码。如果把Async保存为True,你在访问文档时必须检查ReadyState属性或者利用DOMDocument的事件在文档可以访问时提示你的代码。

处理错误

你的文档可能因为各种原因而调入失败,最常见的原因是提供给解析器的文档名不正确,另一个常见的原因是XML文档不合法。

默认的解析器会验证你的文档是否符合某个DTD 或者 schema,你可以不让解析器执行验证,在执行Load方法之前,将DOMDocument的属性ValidateOnParseFalse

Dim xDoc As MSXML.DOMDocument

Set xDoc = New MSXML.DOMDocument

xDoc.validateOnParse = False

If xDoc.Load("C:\My Documents\cds.xml") Then

文档调入成功

作我们喜欢作的事

Else

文档调入失败

End If

事先关闭验证功能不是个好主意,它会带来许多问题,至少它会是你提供错误格式的数据给你的用户。

你可以通过访问ParseError对象来从解析器那儿获得有关错误类型的信息。创建一个IXMLDOMParseError界面的引用,然后把它指向文档自身的ParseError对象。IXMLDOMParseError界面实现了七种属性来使你获得错误原因。

下面的例子显示了一个信息框,列出了ParseError对象中所有错误信息。

Dim xDoc As MSXML.DOMDocument

Set xDoc = New MSXML.DOMDocument

If xDoc.Load("C:\My Documents\cds.xml") Then

文档调入成功

作我们喜欢作的事

Else

文档调入失败

Dim strErrText As String

Dim xPE As MSXML.IXMLDOMParseError

获得parseError对象

Set xPE = xDoc.parseError

With xPE

strErrText = "你的XML Document 不能调入" & _

"原因是." & vbCrLf & _

"错误 #: " & .errorCode & ": " & xPE.reason & _

"Line #: " & .Line & vbCrLf & _

"Line Position: " & .linepos & vbCrLf & _

"Position In File: " & .filepos & vbCrLf & _

"Source Text: " & .srcText & vbCrLf & _

"Document URL: " & .url

End With

MsgBox strErrText, vbExclamation

End If

Set xPE = Nothing

你可以利用parseError对象来向你的用户报告错误信息,或者把它写入你个Log中,你还可以尝试自己解决遇到的问题。

如何从XML文档中取得信息

一旦你成功的调入了文档,下一步就是如何从中获得信息了。当你操作文档时,你经常会用到IXMLDOMNode界面,你利用它来读/写各个分离的节点元素。在使用它之前,你必须先理解MSXML支持的13种节点元素类型,下面是最常用的几个。

DOM
节点类型
举例

NODE_ELEMENT
<artist type="band">The Offspring</artist>

NODE_ATTRIBUTE
type="band">The Offspring

NODE_TEXT
The Offspring

NODE_PROCESSING_INSTRUCTION
<?xml version="1.0"?>

NODE_DOCUMENT_TYPE
<!DOCTYPE compactdiscs SYSTEM "cds.dtd">




你通过IXMLDOMNode界面实现的两个属性来访问节点的类型。NodeType属性列举了DOMNodeType所有项目(一些项目列举在上面的表格上)。另外,你可以用NodeTypeString属性来获得表示节点类型的字符串。

一旦你有了文档的DOM引用,你就可以遍历节点的层次。通过文档引用,你可以访问ChildNodes属性,它给出了一个自上而下的包含所有节点的目录。ChildNodes属性实现了IXMLDOMNodeList,它支持Visual BasicFor/Each结构,所以你可以列举出ChildNodes中的所有节点。另外,ChildNodes


上面的文档的第二行引用了一个外部DTD(文档类型描述),DTD描述了一个特定类型的XML的层次结构和能包括的内容。XML解析器利用DTD来验证XML文档的正确性。DTD只是你用来让解析器验证XML文档是否合法的办法的一种,另一个越来越受欢迎的方法是XML Schema,它用XML来描述Schema而不是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)>

本文不会对DTDXML Schemas讨论过深,基于XML-DATAXML Schema Reference已提交给W3C
分享到:
评论

相关推荐

    XML.rar_XML DOM_仓库 html

    XML DOM初学者指南,以及介绍XML仓库管理技术等

    XML文章

    SOAP简单对象访问协议,XML DOM 初学者指南 ==

    JavaScript学习指南(第2版).pdf

    “无论你是初学者还是有经验的程序员,当你学习一门新语言时,我都会强烈建议你阅读本书。Shelley所采用的直观易懂的教学方法,能够帮助你掌握该语言的基础和细节,以便你能够在自己网站上更好地使用它。” ——...

    《JavaScript学习指南(第2版)》[PDF]

     “无论你是初学者还是有经验的程序员,当你学习一门新语言时,我都会强烈建议你阅读本书。Shelley所采用的直观易懂的教学方法,能够帮助你掌握该语言的基础和细节,以便你能够在自己网站上更好地使用它。”

    jQuery权威指南-源代码

    《jQuery权威指南》除了理论知识丰富而全面外,它还有一个最大的特点就是注重实战,每个知识点都有一个完整的案例,包括需求分析、代码实现和结果展示三个部分,而且还包含两个综合性的案例,它的实践性之强是目前...

    JavaScript权威指南(第6版)中文文字版

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript...

    JavaScript权威指南(第6版)

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、...

    JavaScript权威指南(第6版)(附源码)

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 作者简介  DavidFlanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScriptPocket ...

    JavaScript权威指南(第6版)(中文版)

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、...

    JavaScript权威指南(第6版)

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript...

    JavaScript权威指南(第6版) 中文版

    本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 作者简介 作者:(美国)弗兰纳根(David Flanagan) 译者:淘宝前端团队 目录 前言 1 第1章 javascript概述 5 1.1 javascript语言核心 8 1.2...

    vc++ 应用源码包_1

    完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...

    vc++ 应用源码包_2

    完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...

    vc++ 应用源码包_6

    完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...

    vc++ 应用源码包_5

    完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...

Global site tag (gtag.js) - Google Analytics