使用Visual Basic操纵XML文档

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

使用Visual Basic操纵XML文档


中国航空信息中心 吴斌


对于 XML 文档,插入、修改、检索等数据操作工作可以通过一个 XML解析器及其列举的一系列对象来完成。 Microsoft的 XML解析器驻留在名为ms XML.dll的动态链接库文件中。因为ms XML是一个COM对象,所以可以在任何兼容ActiveX的环境中使用它,如在VB和 ASP中。本文介绍在 Visual Basic操纵 XML 文档的具体方法。 装载 XML 文档 新建一个VB Standard EXE工程项目。在Form1中添加一个CommandButton控件,将其Name和Caption属性分别设为cmdLoad和Load XML。为了使用ms XML解析器,必须事先设置工程项目对ms XML.dll的引用。选择Project菜单的 References命令,选中Microsoft XML, version 2.0或更高版本。将下列代码加入 cmdLoad_Click事件: Option ExplicitDim XML As DOMDocumentPrivate Sub cmdLoad_Click()Set XML = New DOMDocumentCall XML.Load(App.Path & “flight. XML")' flight. XML为描述航班信息的 XML 文档End Sub运行该程序,点击Load XML按钮即可装载 XML 文档。载入的 XML 文档包含一个按照树状结构排列的节点对象集合,顶层节点或根节点是 documentElement。每个节点都有一组属性和方法,每个节点可以包含一个或多个子节点,当然也可以不包含任何节点。必须先取得对根节点的引用才能 操纵 XML 文档。在 cmdLoad_Click事件代码后添加下列代码: Dim root As I XMLDOMElementSet root = XML.documentElement遍历节点集合 可以使用 Visual Basic的For Each...Next循环结构在节点对象集合中循环。在cmdLoad_Click事件代码后添加下列代码: Dim node As I XMLDOMNodeFor Each node In root.childNodesDebug.Print node.TextNext运行后点击Load XML按钮,将会在Immediate窗口中看到如下输出结果: 2000年10月15日 北京 首都国际 香港 赤邋角 中国国际航空公司 波音公司 B747 13:00 15:55 上海 浦东 法兰克福 美茵 塔什干 尤日内 汉莎航空公司 空中客车工业公司 A330 21:45 01:45 注意,每个节点的Text属性不仅包含自身的属性值,还包含其下属所有子节点的Text属性值。一般情况下,不会同时操作所有的节点。可以使用 selectNodes方法取得对一个特定的节点子集的引用,selectNodes方法返回一个 I XMLDOMNodeList对象。在cmdLoad_Click事件代码后添加下列代码: Dim flightNodes As I XMLDOMNodeListSet flightNodes = root.selectNodes(“航班")For Each node In flightNodesDebug.Print node.selectSingleNode(“离站时间").Text & “——" &node.selectSingleNode (“到站时间").TextNext这段代码使用selectNodes方法选择根节点下所有的“航班”节点,然后使用selectSingleNode方法选择“航班”节点下的“离站时间”和“到站时间”,读取并打印它们的Text属性值。 可以使用childNodes集合以递归的方式层次化显示 XML 文档的内容。 首先,在Form1中声明一个子过程PrettyPrint。 Public Sub PrettyPrint(node As I XMLDOMNode,Optional tabLevel As Integer=0)Dim childNode As I XMLDOMNodeIf node.nodeName<>vbNullStrin And node.nodeName < >“#text" ThenDebug.PrintString(tabLevel,Chr$(9))&“< "&node.nodeName&“ >"End IfIf node.hasChildNodes ThenFor Each childNode In node.childNodesCall PrettyPrint(childNode,tabLevel+1)NextElseDebug.PrintString(tabLevel+1,Chr$(9))&node.TextEnd IfIf node.nodeName< >vbNullString And node.nodeName< >“#text" ThenDebug.PrintString(tabLevel,Chr$(9))&“< /"&node.nodeName&“ >"End IfEnd Sub然后在Form1中加入第2个CommandButton控件,将其 Name和Caption属性分别设为cmdPrint和Print。将下列代码加入事件cmdPrint_Click中: Private Sub cmdPrint_Click()If Not XML Is Nothing ThenCall PrettyPrint( XML.documentElement)End IfEnd Sub运行程序。首先点击Load XML按钮加载flight. XML,然后点击Print按钮。在Immediate窗口中可以看到层次分明、易于阅读的输出结果。子过程 PrettyPrint在documentElement的子节点中循环,打印每个节点的nodeName属性值,而每个子节点又递归调用PrettyPrint。 XML 文档内各节点内在的相似性是 XML最具吸引力的特性,每个子节点都与其父节点有着相同的属性和方法(尽管各自的内容通常不同),这就使得为同一 文档中的所有或部分节点编写某种规则变得相对简单。 修改节点内容 如同修改数据库中的记录一样,也可以修改 XML 文档中节点的内容。下列代码修改了flight. XML 文档中“发布日期”节点的Text属性值: Set node = root.selectSingleNode(“发布日期")If Not node Is Nothing Thennode.Text = “2000年10月20日"End If修改了 文档内容之后,可以使用Save方法保存修改后的 文档。Save方法可以将 XML 文档保存为文件、数据流或ASP的Response对象。Save方法的用法如下: XML.save App.Path & “flightupdated. XML"将上面两段代码添加在cmdLoad_Click事件中,运行程序。点击Load XML按钮,在程序工作目录中会增加一个新文件flightupdated. XML。在IE5 中打开该文件,可以看到“发布日期”标记的文本已经被改为“2000年10月20日”。 在实际应用中, XML可以被用作数据传输格式、可搜索数据库、可定制的数据存储方式和显示信息的数据源(需要XSL或如VB这样的编程语言的帮助)。因为ms XML是一个COM对象,所以可以在ASP页中使用它的实例,然后方便地使用VBScript或JScript编程来 操纵它。 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值