分享好友 编程语言首页 频道列表

VB操作XML

VisualBasic  2023-02-09 10:090

XSL(可扩展样式表语言)是对CSS的一种扩展,功能比CSS强大得多。XML链接是在HTML链接的功能之上加以扩展,可以支持更为复杂的链接,通过XML链接,不仅可以在XML文件之间建立链接,还可以建立其他类型数据之间的链接,其规范分为三个部分:XLink语言,XPointer语言和XML Base.

  XML标准体系中还有其他很多技术,比如针对DTD的不足而提出的XML Schema,对XML文档进行结构话处理的DOM等,由于篇幅的关系,在这就不一一列举,不熟悉的请参考有关书籍。

  好了,现在让我们开始进入正题——对XML的操作。首先,请保证您的电脑中有最新版本的MSXML,微软XML核心服务(MSXML)版本4.0提供了从Visual Basic6.0加载和存储XML文档的工具。若没有,请到http://msdn.microsoft.com/xml/default.asp中下载最新版本的MSXML,并安装在计算机上。在Visual Basic 6.0中使用Microsoft XML V4.0对象引用其他对象一样,首先在工程菜单中选择引用菜单项,选择Microsoft V4.0,单击OK,一切完成后就现在就可以在VB应用程序中添加XML对象了。如图:

VB操作XML

  万事俱备,我们先用VB和MSXML的COM接口的DOM实现的一个例子来对XML操作进行初步的了解吧。

  首先声明下面要用的几个对象的变量:

Dim tempdoc As DOMDocument
Dim tempnode As IXMLDOMNode
Dim tempelement As IXMLDOMElement
Dim tempattribute As IXMLDOMElement
Dim root As IXMLDOMElement
  文档对象模型(DOM)使用了一系列相应的对象描述了XML文档的等级状态,DOMDocument类是一个描绘XML文档的DOM结构的MSXML类。DOMDocument类仅仅提供了很少的几个有用的属性和方法,例如:Load方法载入一个xml文件,loadxml方法将字符串作为xml数据添加到对象中。DOMDocument的xml属性返回文档的xml描述,可以显示这些返回值看看这些文档究竟是什么样子,也可以将它存储为一个文件,DOMDocument对象的documentElement属性表示文档数据的根结点,通常情况下操作XML文档都从这里开始。DOMDocument提供了几种创建新节点的方法。CreateElement方法为文档创建一个新的元素节点,其他创建节点的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在这里就不一一介绍了。

  IXMLDOMNode类描述了一个节点,该类提供了一系列用于搜索和操纵XML文档的属性和方法。selectSingleNode 方法用于搜索指定节点的后代,用于搜索指定节点路径的语言称为XPATH,XPATH非常棘手,本文就不详细说明其规范了。在IXMLDOMNode对象中,有许多有用的属性值:

  attributes.节点属性集合
  nodeName.节点的标记名
  nodeTypeString.节点的类型
  ownerDocument.返回DOMDocument对象包含的节点
  text.表示节点包含的文本内容。如果该节点包含其他节点,那么text代表了所有节点的文本内容的组合。
  
  xml.给出了节点的xml内容,例如:"<Email>hongwanfu@yahoo.com</Email>".

  ChildNodes集合包含了节点的子节点。要给节点增加一个子节点,首先必须给使用DOMDocument对象的节点创建方法,然后将这个新建的节点加入到父节点的childNodes集合中。 ChildNodes集合包含了节点的子节点。要给节点增加一个子节点,首先必须给使用DOMDocument对象的节点创建方法,然后将这个新建的节点加入到父节点的childNodes集合中。

  由于每个节点类型都有不同的访问方法和内容限制,有时候使用特定类型的节点要比使用通用 IXMLDOMNode 对象更容易。要做到这一点,需要使用 IXMLDOMElement 对象来处理 XML 数据元素和属性。正如元素可以包含 XML 数据文件中的子元素、文本、注释、处理说明、CDATA 部分和实体引用一样,IXMLDOMElement 对象也可以包含 IXMLDOMElement、IXMLDOMText、IXMLDOMComment、IXMLDOMProcessingInstruction、IXMLDOMCDATASection 和 IXMLDOMEntityReference 对象。可以通过使用 IXMLDOMElement 对象的 getAttribute 和 setAttribute 方法来访问属性;或者通过 IXMLDOMElement 对象的 attributes 属性,将属性作为 IXMLDOMNamedNodeMap 对象进行管理。有关使用这些方法和对象的详细信息,请参阅 MSXML 4.0 SDK Help。

  接下来我们要做的是生成一个XML DOMDocument 对象 :

Set tempdoc = New DOMDocument
  生成根节点并把它设置为文件的根 :

Set root = tempdoc.createElement("Personal")
Set tempdoc.documentElement = root
  生成孩子节点添加到根节点上去,并且为这个节点设置一个属性 :
  
Set tempnode = tempdoc.createNode(NODE_ELEMENT, "Web", "")
tempnode.Text = " http://hongwanfu.126.com "
root.appendChild tempnode
  取得元素节点的接口,添加属性:

Set tempelement = tempnode
tempelement.setAttribute "Type", "Homepage"
  最后,写XML文件:

Open "CreateXMLFile.xml" for output as #1
Print #1, root.XML
Close #1
  下面就是上面程序生成的CreateXMLFile.xml文件的内容如图:

VB操作XML

 


 

  熟悉了如何用Visual Basic 6创建XML文件,接下来,我们将编写一个程序,使得程序开始运行时,程序从XML文件中加载数据,在程序运行结束时,将程序中的现行值存入XML文件中。

  首先,建立一个名叫Personal.xml的文件:

<?xml version="1.0" encoding="GB2312"?>

<个人信息>

<姓名>洪万福</姓名>

<性别>男</性别>

<出生日期>1983年x月x日</出生日期>

<地址>福建省厦门市集美大学水产学院新区270#</地址>

<邮编>361021</邮编>

<QQ>24948251</QQ>

<个人主页>http://hongwanfu.126.com</个人主页>

</个人信息>
  其中,encoding="GB2312"是为了防止显示中文时出现乱码。

  接着,进入Visual Basic 6,建立7个Label和7个TextBox, 具体如图:

VB操作XML

  随后,编写如下代码:

Option Explicit
Private p_AppPath As String
Private Sub Form_Load()
 ' 获得程序运行目录
 p_AppPath = App.Path
 If Right$(p_AppPath, 1) <> "\" Then p_AppPath = p_AppPath & "\"
 ' 加载值
 LoadValues
End Sub

Private Sub Form_Unload(Cancel As Integer)
 ' 保存现有的值
 SaveValues
End Sub

Private Sub LoadValues()

 Dim xml_document As DOMDocument

 Dim values_node As IXMLDOMNode

 ' 载入文件

 Set xml_document = New DOMDocument
 xml_document.Load p_AppPath & "Personal.xml"
 If xml_document.documentElement Is Nothing Then

  Exit Sub

 End If

 '寻找节点
 Set values_node = xml_document.selectSingleNode("个人信息")
 ' 读取各个节点的值
 txtName.Text = GetNodeValue(values_node, "姓名", "???")
 txtSex.Text = GetNodeValue(values_node, "性别", "???")
 txtBirthday.Text = GetNodeValue(values_node, "出生日期", "???")
 txtAddress.Text = GetNodeValue(values_node, "地址", "???")
 txtZip.Text = GetNodeValue(values_node, "邮编", "???")
 txtQQ.Text = GetNodeValue(values_node, "QQ", "???")
 txtHomepage.Text = GetNodeValue(values_node, "个人主页", "???")

End Sub

' 返回各个节点的值

Private Function GetNodeValue(ByVal start_at_node As IXMLDOMNode, ByVal node_name As String, _

Optional ByVal default_value As String = "") As String

 Dim value_node As IXMLDOMNode
 Set value_node = start_at_node.selectSingleNode(".//" & node_name)
 If value_node Is Nothing Then
  GetNodeValue = default_value
 Else
  GetNodeValue = value_node.Text
 End If

End Function

' 保存现有的值

Private Sub SaveValues()
 Dim xml_document As DOMDocument
 Dim values_node As IXMLDOMNode
 ' 建立XML文件
 Set xml_document = New DOMDocument
 Set values_node = xml_document.createElement("个人信息")
 xml_document.appendChild values_node
 CreateNode values_node, "姓名", txtName.Text
 CreateNode values_node, "性别", txtSex.Text
 CreateNode values_node, "出生日期", txtBirthday.Text
 CreateNode values_node, "地址", txtAddress.Text
 CreateNode values_node, "邮编", txtZip.Text
 CreateNode values_node, "QQ", txtQQ.Text
 CreateNode values_node, "个人主页", txtHomepage.Text
 ' 保存XML文件
 xml_document.save p_AppPath & "Personal.xml"
 
End Sub

Private Sub CreateNode(ByVal parent As IXMLDOMNode, _

ByVal node_name As String, ByVal node_value As String)

 Dim new_node As IXMLDOMNode
 Set new_node = parent.ownerDocument.createElement(node_name)
 new_node.Text = node_value
 parent.appendChild new_node
End Sub
  运行结果如下:

VB操作XML

  虽然,MSXML提供了从Visual Basic6.0加载和存储XML文档的工具,但是,对其的应用要求程序员对VB和MSXML的COM接口有一定的认识,所以,并不是得到很广泛的应用。

查看更多关于【VisualBasic】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Windows API Reference for C#, VB.NET
不错的.net 下用API的参考站点地址在:http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp 下面摘抄分类,便于大家直接就拿来用: File, Memory, Process, Threading, Time, Console, and Comm control(kernel32.dll) _hread_hwrite_lclose_lcr

0评论2023-03-16877

一个基于API的VB.net串口通讯类 vbnet串口通信如何编写
VB.net的串口通讯支持总是让人觉得有所不足,在使用VB6的MsComm32.ocx时,很多人都会在VB.net的开发中觉得很困扰。    这里讲述的VB.net串口通讯类使用native代码,并且它是通API调用实现的,你会发现VB.net的串口通讯就是这么简单。    在说明如何使

0评论2023-02-12420

[VB][ASP.NET]FileUpload控件「批次上传 / 多档案同时上传」的范例
FileUpload控件「批次上传 / 多档案同时上传」的范例 (VB语法) http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/14/3986.aspx    FileUpload控件真的简单好用,不使用它来作批次上传,却要改用别的方法,实在不聪明。要用就一次用到底,公开File

0评论2023-02-10976

第八章 VB中ActiveX控件的使用
轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第八章          VB中ActiveX控件的使用8.1  概述     这里的ActiveX控件是指VB标准工具箱里没有的控件,用时需从“工程”菜单里选择“部件…”(或右键单击工具箱,从快捷菜单中选择“部

0评论2023-02-10615

第二章 VB的界面设计
轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第二章         VB的界面设计2.1  VB用户界面设计基础1. 概述   界面的设计有两步:先绘制控件,然后确定控件属性。   绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后

0评论2023-02-10497

VB6多线程,关键段操作 vb6.0 多线程
Option Explicit Declare Function GetLastError Lib "kernel32" () As Long 'Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 'Declare Sub ExitThread Lib "kernel32" (Optional ByVal dwExitCode

0评论2023-02-09486

VB.NET调用IE,并且等待
            Dim p As New Process            '获得URL            aURL = GetURL()            '获得IE路径            p.StartInfo.FileName = System.Environment.GetFolderPath( _ 

0评论2023-02-09939

vb的VSFlexGrid控件 vb msflexgrid
多行选中VSFlexGrid的SelectionMode = flexSelectionListBox,现在可以配合Ctrl进行多行选择循环取值用vsflexgrid.SelectedRows 可以得到你选择的行的总数量然后用循环可以得到具体的行中具体列的内容Dim Temp  As StringDim i As IntegerFor i =

0评论2023-02-09868

转载-公历转换农历VB示例 公历转农历函数
Option ExplicitPrivate LunarInfo(1 To 150) As Double '从1900-2049年这150年的农历信息码Private SolarMonth(1 To 12) As Integer '阳历12个月的天数Private Gan(1 To 10) As String '农历的天干Private Zhi(1 To 12) As String '农历的地支Private Animal

0评论2023-02-09982

[转] VB的Ping 模块
图:Ping通的情况图:Ping失败的情况下面是源代码(VB6):(完善的出错控制,所以是个好函数)Option ExplicitPrivate Const IP_SUCCESS As Long = 0Private Const IP_STATUS_BASE As Long = 11000Private Const IP_BUF_TOO_SMALL As Long = (11000 + 1)Private

0评论2023-02-09407

VB.NET withevent 自定义事件处理
Module Module1    Private WithEvents aemp As part2    Sub Main()        Dim chen As New part2("chen lili", 20000)        aemp = chen        Console.WriteLine(chen.Name" prevouis salary is "chen.Salary)      

0评论2023-02-09571

VB6操作ACCESS文件 vb+access
VB6操作ACCESS文件Option ExplicitConst Dict_DB = "adatabase.mdb"'先要引用Microsoft ActiveX Data Objects 2.8 LibraryPublic cnn As ADODB.ConnectionPublic rst As ADODB.Recordset, rst2 As ADODB.RecordsetPublic cmd As ADODB.CommandPrivate Sub For

0评论2023-02-09762

VB用API实现各种对话框(总结) vbs简单代码对话框
VB用API实现各种对话框(总结)  各种对话框(总结)标准对话框(SmDialog)Option Explicit''定义一个全局变量,用于保存字体的各种属性Public Type SmFontAttrFontName As String '字体名FontSize As Integer '字体大小FontBod As Boolean '是否黑体FontItalic A

0评论2023-02-09401

VB中的正则表达式 vb 正则表达式
RegExp对象提供简单的正则表达式支持功能。  RegExp对象的用法:Function RegExpTest(patrn, strng)Dim regEx, Match, Matches ' 建立变量。Set regEx = New RegExp ' 建立正则表达式。regEx.Pattern = patrn ' 设置模式。regEx.IgnoreCase = True ' 设置是

0评论2023-02-09890

VB 调用水晶报表2
Set rptApp = New CRPEAuto.ApplicationrptApp.LogOnServer "PDSODBC.DLL", "sbd", "sbd", "epm", "epmis"Set rpt = rptApp.OpenReport(App.Path"\\计划管理\\月度保养计划.rpt")rpt.SQLQueryString = strSQL \'strS

0评论2023-02-09631

【VB】StrConv函数 vbUnicode用法
【VB】StrConv函数StrConv(string, conversion, LCID)vbUnicode64根据系统的缺省码页将字符串转成Unicode。vbFromUnicode128将字符串由 Unicode 转成系统的缺省码页。    Windows系统对字符采用了DBCS编码,它是一套单字节和双字节的混合编码,即西文与AS

0评论2023-02-09999

vb.net 时间类型转字符串后的格式
做下记录vb.net中时间类型转换成字符串也是可以设置格式的,如:  DateTime.Now.ToString("yyyyMMdd hh:mm:ss") ----print:   20090313 15:12:30  DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")---Print:    2009-03-13 15:12:05等等,其余还可以设置

0评论2023-02-09354

更多推荐