从XML文件中获得信息最好的办法是利用XML解析器。解析器,简单的讲,就是一个软件,它可以使XML文件中的数据易于使用。作为VB的开发者,你可能想得到一个支持Document Object Model (DOM)的解析器。DOM描述了一系列标准的访问XML和HTML文档的方法,这些方法解析器应该实现。一个支持DOM的解析器应该把XML中的数据变成一系列对象,这样就可以对这些对象二次编程。在这篇文章中,你会学习如何利用Microsoft 解析器(Msxml.dll)实现的DOM结构访问和维护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>
<! 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)>
从XML文件中获得信息最好的办法是利用XML解析器。解析器,简单的讲,就是一个软件,它可以使XML文件中的数据易于使用。作为VB的开发者,你可能想得到一个支持Document Object Model (DOM)的解析器。DOM描述了一系列标准的访问XML和HTML文档的方法,这些方法解析器应该实现。一个支持DOM的解析器应该把XML中的数据变成一系列对象,这样就可以对这些对象二次编程。在这篇文章中,你会学习如何利用Microsoft 解析器(Msxml.dll)实现的DOM结构访问和维护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>
<! 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)>
Public Sub LoadDocument() Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocument xDoc.validateOnParse = False
If xDoc.Load("C:\My Documents\sample.xml") Then ' The document loaded successfully. ' Now do something intersting. DisplayNode xDoc.childNodes, 0 Else 'The document failed to load. 'See the previous listing for error information. End If
End Sub Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _ ByVal Indent As Integer) Dim xNode As MSXML.IXMLDOMNode Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_TEXT Then Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _ ":" & xNode.nodeValue End If If xNode.hasChildNodes Then DisplayNode xNode.childNodes, Indent End If
Next xNode
End Sub DisplayNode用HasChildNodes属性来确认是否再次调用自己,你也可以用节点的Level属性,如果大于0,则有子节点。
下一步该干什么
这仅仅是个开始,你现在可以更深的了解XML和Microsoft 解析器(Msxml.dll)。你可以作一些有趣的事例如改变某个节点的值,搜索文档,建立你自己的文档等等。访问 MSDN Online XML Developer Center以获得更多的例子,文章和下载。
我做的一个treeview的 Dim objXML As DOMDocument Dim nXML As Node Dim childnode As Node Dim secondnode As NodePrivate Sub Command1_Click() 'xmlDom object 'Set objXML = CreateObject("Microsoft.XMLDOM") Set objXML = New DOMDocument objXML.async = False 'load the xml menu file objXML.Load ("mysites.xml") Set objLst = objXML.getElementsByTagName("site") 'how many items intNoOfHeadlines = objLst.length 'looping over the items -1 because it's starts from 0\ Set nXML = TreeView1.Nodes.Add(, , "root", "站点信息") 'Call LoadTree(nXML, children) For i = 0 To intNoOfHeadlines - 1 Set objHdl = objLst.Item(i) key1 = "p" & i Set childnode = TreeView1.Nodes.Add(nXML, tvwChild, "", objHdl.childNodes(0).Text) Set secondnode = TreeView1.Nodes.Add(childnode, tvwChild, "", objHdl.childNodes(1).Text) 'List2.AddItem objLst.Item(i).Attributes(i).Text 'List3.AddItem objHdl.childNodes(2).Text NextEnd Submysites.xml<?xml version="1.0"?> <mysites> <site> <topic>news</topic> <name>CNN</name> <url>http://www.cnn.com</url> </site> <site> <topic>sport</topic> <name>Sydney 2000</name> <url>http://www.olympics.com</url> </site> <site><topic>Travel</topic><name>VirtualTourist</name><url>http://www.virtultourist.com</url></site><site><topic>computers</topic><name>Experts-exchange</name><url>http://www.experts-exchange.com</url></site><site><topic>computers</topic><name>Microsoft</name><url>http://www.microsoft.com</url></site><site><topic>sport</topic><name>Sportelo</name><url>http://www.sportelo.co.il</url></site><site><topic>computers</topic><name>myscript</name><url>http://www.myscript.co.il</url></site><site><topic>computers</topic><name>asp101</name><url>http://www.asp101.com</url></site><site><topic>y</topic><name>y</name><url>http://y</url></site></mysites>
Private Sub LoadXML() 'Xml文件结构如下: ' <?xml version="1.0" encoding="gb2312" ?> '- <test> ' <type name="古典武侠">侠义天下</type> '- <book name="寻秦记" author="黄易" price="25"> ' <chapter2 title="科学疯子" page="87">被拉过去当实验品</chapter2> ' <chapter3 title="阴错阳差" page="44">实验失败,来到了三年前秦国</chapter3> ' <chapter4 title="美蚕娘" page="26">在荒野山村遇到美蚕娘</chapter4> ' </book> ' </test> Dim xmlDom As New DOMDocument Dim xmlNode As IXMLDOMElement Dim i As Integer
xmlDom.Load (App.Path + "\xml.xml") Set xmlNode = xmlDom.documentElement.childNodes(1)
If xmlDom.documentElement Is Nothing Then Exit Sub End If
For i = 0 To xmlNode.childNodes.length - 1 With ListView1.ListItems.Add(, , xmlNode.childNodes(i).nodeName) .SubItems(1) = xmlNode.childNodes(i).Attributes(0).Text .SubItems(2) = xmlNode.childNodes(i).Attributes(1).Text .SubItems(3) = xmlNode.childNodes(i).Text End With NextEnd Sub
在我们继续前进时,让我们先看一段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 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)>
本文不会对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,操作如下:
打开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
在我们继续前进时,让我们先看一段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 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)>
本文不会对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,操作如下:
打开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
状态 属性值
未初始化:调入文档没有开始 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属性还实现了Level属性,它可以返回所有子节点的数目。
不只是文档对象有ChildNodes属性,每一个节点都有ChildNodes属性。因为如此,ChildNodes属性和IXMLDOMNode's HasChildNodes属性配合,使你非常方便的遍历文档,访问元素,属性,值。
值得一提的是,元素和元素值之间是父子关系。例如在cds XML文档中,元素<title>表示歌曲的名字,要知道<title>的值,你需要访问节点的属性NODE_TEXT。如果你发现一个节点有你感兴趣的数据,你可以访问它的属性,也可以通过ParentNode属性来访问它们的父节点。
如何遍历XML文档
你能够遍历文档的节点是利用文档对象,因为XML本身就是层次结构,所以很容易编写递归代码来访问整个文档。
LoadDocument程序打开XML文档,然后调用另一个程序DisplayNode,它用来显示文档的结构。LoadDocument传递给正在打开的XML文档的ChildNodes属性一个引用作为它的参数,同时传递一个整数用来标示开始显示的层次级别。代码利用参数来格式化在Visual Basic文档结构显示窗口中的文本。
DisplayNode属性的函数会遍历文档寻找需要的NODE_TEXT节点类型串,一旦代码找到一个NODE_TEXT的节点,它会利用NodeValue属性来获得相应的文本串。另外,当前节点的ParentNode属性指向一个元素类型的节点。元素节点实现了一个NodeName属性,
NodeName和NodeValue属性会被显示。
如果一个节点还有子节点,通过检测HasChildNodes属性确认,DisplayNode就会调用自己知道遍历文档的全部。
下面这个DisplayNode程序用Debug.Print向Visual Basic窗口写入相关信息。
Public Sub LoadDocument()
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("C:\My Documents\sample.xml") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode xDoc.childNodes, 0
Else
'The document failed to load.
'See the previous listing for error information.
End If
End Sub Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_TEXT Then
Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _
":" & xNode.nodeValue
End If If xNode.hasChildNodes Then
DisplayNode xNode.childNodes, Indent
End If
Next xNode
End Sub DisplayNode用HasChildNodes属性来确认是否再次调用自己,你也可以用节点的Level属性,如果大于0,则有子节点。
下一步该干什么
这仅仅是个开始,你现在可以更深的了解XML和Microsoft 解析器(Msxml.dll)。你可以作一些有趣的事例如改变某个节点的值,搜索文档,建立你自己的文档等等。访问 MSDN Online XML Developer Center以获得更多的例子,文章和下载。
Dim objXML As DOMDocument
Dim nXML As Node
Dim childnode As Node
Dim secondnode As NodePrivate Sub Command1_Click() 'xmlDom object
'Set objXML = CreateObject("Microsoft.XMLDOM")
Set objXML = New DOMDocument
objXML.async = False
'load the xml menu file
objXML.Load ("mysites.xml")
Set objLst = objXML.getElementsByTagName("site")
'how many items
intNoOfHeadlines = objLst.length
'looping over the items -1 because it's starts from 0\
Set nXML = TreeView1.Nodes.Add(, , "root", "站点信息")
'Call LoadTree(nXML, children)
For i = 0 To intNoOfHeadlines - 1
Set objHdl = objLst.Item(i)
key1 = "p" & i
Set childnode = TreeView1.Nodes.Add(nXML, tvwChild, "", objHdl.childNodes(0).Text)
Set secondnode = TreeView1.Nodes.Add(childnode, tvwChild, "", objHdl.childNodes(1).Text)
'List2.AddItem objLst.Item(i).Attributes(i).Text
'List3.AddItem objHdl.childNodes(2).Text
NextEnd Submysites.xml<?xml version="1.0"?>
<mysites>
<site>
<topic>news</topic>
<name>CNN</name>
<url>http://www.cnn.com</url>
</site>
<site>
<topic>sport</topic>
<name>Sydney 2000</name>
<url>http://www.olympics.com</url>
</site>
<site><topic>Travel</topic><name>VirtualTourist</name><url>http://www.virtultourist.com</url></site><site><topic>computers</topic><name>Experts-exchange</name><url>http://www.experts-exchange.com</url></site><site><topic>computers</topic><name>Microsoft</name><url>http://www.microsoft.com</url></site><site><topic>sport</topic><name>Sportelo</name><url>http://www.sportelo.co.il</url></site><site><topic>computers</topic><name>myscript</name><url>http://www.myscript.co.il</url></site><site><topic>computers</topic><name>asp101</name><url>http://www.asp101.com</url></site><site><topic>y</topic><name>y</name><url>http://y</url></site></mysites>
'Xml文件结构如下:
' <?xml version="1.0" encoding="gb2312" ?>
'- <test>
' <type name="古典武侠">侠义天下</type>
'- <book name="寻秦记" author="黄易" price="25">
' <chapter2 title="科学疯子" page="87">被拉过去当实验品</chapter2>
' <chapter3 title="阴错阳差" page="44">实验失败,来到了三年前秦国</chapter3>
' <chapter4 title="美蚕娘" page="26">在荒野山村遇到美蚕娘</chapter4>
' </book>
' </test>
Dim xmlDom As New DOMDocument
Dim xmlNode As IXMLDOMElement
Dim i As Integer
xmlDom.Load (App.Path + "\xml.xml")
Set xmlNode = xmlDom.documentElement.childNodes(1)
If xmlDom.documentElement Is Nothing Then
Exit Sub
End If
ListView1.ListItems.Clear
With ListView1.ColumnHeaders
.Clear
.Add , , "章节"
.Add , , "题目"
.Add , , "页数"
.Add , , "内容简介"
.Item(1).Width = 1000
.Item(2).Width = 1000
.Item(3).Width = 600
.Item(4).Width = 1750
End With
For i = 0 To xmlNode.childNodes.length - 1
With ListView1.ListItems.Add(, , xmlNode.childNodes(i).nodeName)
.SubItems(1) = xmlNode.childNodes(i).Attributes(0).Text
.SubItems(2) = xmlNode.childNodes(i).Attributes(1).Text
.SubItems(3) = xmlNode.childNodes(i).Text
End With
NextEnd Sub