<? 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文档的内容实现为一个对象模型。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,操作如下:
打开Project References项
从COM对象中选择Microsoft XML, version 2.0,如果你找不到此项,你需要得到它。
你可以创建一个解析器的实例了。
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
你可以通过两个途径获得Msxml.dll。
你可以安装IE5.0,MSXML解析器是其中集成的部件。
或者你可以到相关网站上下载它
一旦你建立了类型库的引用,你就可以执行解析,调入文档,总之,你可以处理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
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的属性ValidateOnParse为False。
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 Basic的For/Each结构,所以你可以列举出ChildNodes中的所有节点。另外,ChildNodes
相关推荐
XML DOM初学者指南,以及介绍XML仓库管理技术等
SOAP简单对象访问协议,XML DOM 初学者指南 ==
“无论你是初学者还是有经验的程序员,当你学习一门新语言时,我都会强烈建议你阅读本书。Shelley所采用的直观易懂的教学方法,能够帮助你掌握该语言的基础和细节,以便你能够在自己网站上更好地使用它。” ——...
“无论你是初学者还是有经验的程序员,当你学习一门新语言时,我都会强烈建议你阅读本书。Shelley所采用的直观易懂的教学方法,能够帮助你掌握该语言的基础和细节,以便你能够在自己网站上更好地使用它。”
《jQuery权威指南》除了理论知识丰富而全面外,它还有一个最大的特点就是注重实战,每个知识点都有一个完整的案例,包括需求分析、代码实现和结果展示三个部分,而且还包含两个综合性的案例,它的实践性之强是目前...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 作者简介 DavidFlanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScriptPocket ...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript...
本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 作者简介 作者:(美国)弗兰纳根(David Flanagan) 译者:淘宝前端团队 目录 前言 1 第1章 javascript概述 5 1.1 javascript语言核心 8 1.2...
完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...
完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...
完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...
完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、...