使用Visual Basic操纵XML文档[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 beyondii 的 blog

(“离站时间").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))&node.text
end if
if node.nodename< >vbnullstring and node.nodename
< >“#text" then
debug.printstring
(tablevel,chr$(9))&“< /"&node.nodename&“ >"
end if
end sub
然后在form1中加入第2个commandbutton控件,将其 name和caption属性分别设为cmdprint和print。将下列代码加入事件cmdprint_click中:
private sub cmdprint_click()
if not xml is nothing then
call prettyprint
(xml.documentelement)
end if
end 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 then
node.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这样的编程语言的帮助)。因为msxml是一个com对象,所以可以在asp页中使用它的实例,然后方便地使用vbscript或jscript编程来操纵它。

本文关键:vb xml ibeyond.org
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top