当前位置: 网学 > 编程文档 > VB > 正文

使用Visual Basic操纵XML文档

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式

对于XML文档,插入、修改、检索等数据操作工作可以通过一个XML解析器及其列举的一系列对象来完成。 Microsoft的XML解析器驻留在名为msxml.dll的动态链接库文件中。因为msxml是一个COM对象,所以可以在任何兼容ActiveX的环境中使用它,如在vb和 ASP中。本文介绍在Visual Basic中操纵XML文档的具体方法。  

装载XML文档  
新建一个VB Standard EXE工程项目。在Form1中添加一个CommandButton控件,将其Name和Caption属性分别设为cmdLoad和Load XML。为了使用msxml解析器,必须事先设置工程项目对msxml.dll的引用。选择Project菜单的 References命令,选中Microsoft XML, version 2.0或更高版本。将下列代码加入 cmdLoad_Click事件:  
Option Explicit
Dim xml As DOMDocument
Private Sub cmdLoad_Click()
Set xml = New DOMDocument
Call xml.Load(App.Path & “flight.xml")
'' flight.xml为描述航班信息的XML文档
End Sub

运行该程序,点击Load XML按钮即可装载XML文档。载入的XML文档包含一个按照树状结构排列的节点对象集合,顶层节点或根节点是 documentElement。每个节点都有一组属性和方法,每个节点可以包含一个或多个子节点,当然也可以不包含任何节点。必须先取得对根节点的引用才能操纵XML文档。在 cmdLoad_Click事件代码后添加下列代码:  

Dim root As IXMLDOMElement
Set root = xml.documentElement

遍历节点集合  
可以使用Visual Basic的For EachNext循环结构在节点对象集合中循环。在cmdLoad_Click事件代码后添加下列代码:  
Dim node As IXMLDOMNode
For Each node In root.childNodes
Debug.Print node.Text
Next

运行后点击Load XML按钮,将会在Immediate窗口中看到如下输出结果:  

2000年10月15日  
北京 首都国际 香港 赤邋角 中国国际航空公司 波音公司  
B747 13:00 15:55  
上海 浦东 法兰克福 美茵 塔什干 尤日内 汉莎航空公司 空中客车工业公司  
A330 21:45 01:45  

注意,每个节点的Text属性不仅包含自身的属性值,还包含其下属所有子节点的Text属性值。一般情况下,不会同时操作所有的节点。可以使用 selectNodes方法取得对一个特定的节点子集的引用,selectNodes方法返回一个 IXMLDOMNodeList对象。在cmdLoad_Click事件代码后添加下列代码:  

Dim flightNodes As IXMLDOMNodeList
Set flightNodes = root.selectNodes(“航班")
For Each node In flightNodes
Debug.Print node.selectSingleNode
(“离站时间").Text & “——"  
&node.selectSingleNode (“到站时间").Text
Next

这段代码使用selectNodes方法选择根节点下所有的“航班”节点,然后使用selectSingleNode方法选择“航班”节点下的“离站时间”和“到站时间”,读取并打印它们的Text属性值。  

可以使用childNodes集合以递归的方式层次化显示XML 文档的内容。  

首先,在Form1中声明一个子过程PrettyPrint。  

Public Sub PrettyPrint(node As IXMLDOMNode,
Optional tabLevel As Integer=0)
Dim childNode As IXMLDOMNode
If node.nodeName<>vbNullStrin  
And node.nodeName < >“#text" Then
Debug.PrintString(tabLevel,Chr$(9))
&“< "&node.nodeName&“ >"
End If
If node.hasChildNodes Then
For Each childNode In node.childNodes
Call PrettyPrint(childNode,tabLevel+1)
Next
Else
Debug.PrintString(tabLevel+1,Chr$(9))&no
  • 上一篇资讯: VB数据库编程经验两则
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号