您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > VB开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

在Visual Basic 6.0中操纵XML文件
2002-10-17· ·crystal编译··yesky

上一页  1 2 3  下一页

  DOMDocument 类

  文档对象模型(DOM)使用了一系列相应的对象描述了XML文档的等级状态,DOMDocument类是一个描绘XML文档的DOM结构的MSXML类。

  DOMDocument类仅仅提供了很少的几个有用的属性和方法。Load方法载入一个xml文件,loadxml方法将字符串作为xml数据添加到对象中。例如,下面的代码就将一个小的xml文件添加到名为xml_document的文档中。

Dim xml_document As New DOMDocument

xml_document.loadXML _
"<Person>" & vbCrLf & _
" <FirstName>Rod</FirstName>" & vbCrLf & _
" <LastName>Stephens</LastName>" & vbCrLf & _
"</Person>"


  DOMDocument的xml属性返回文档的xml描述,可以显示这些返回值看看这些文档究竟是什么样子,也可以将它存储为一个文件,但这完全不必要,因为DOMDocument对象的save方法已经自动将他们存储了。

  DOMDocument对象的documentElement属性表示文档数据的根结点,通常情况下操作XML文档都从这里开始。

  DOMDocument提供了几种创建新节点的方法。CreateElement方法为文档创建一个新的元素节点,其他创建节点的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在这里就不一一介绍了。

  IXMLDOMNode类

  IXMLDOMNode类描述了一个节点,该类提供了一系列用于搜索和操纵XML文档的属性和方法。
selectSingleNode 方法用于搜索指定节点的后代,用于搜索指定节点路径的语言称为XPATH,XPATH非常棘手,本文就不详细说明其规范了。下面我们将介绍两个对搜索子节点有特别有用并且简单的方法。

  在给selectsingleNode方法中输入子节点的名字,该方法将在节点的子节点进行精确匹配搜索。如果在输入的字符串前面加上".//",那么将搜索节点的全部后代。

' Search for a child node named "LastName."
Set last_name_node = address_node.selectSingleNode("LastName")

' Search for any descendant named "LastName."
Set last_name_node = address_node.selectSingleNode(".//LastName")

  下面列出了IXMLDOMNode对象的部分非常有用的属性:

   attributes.节点属性集合

   nodeName.节点的标记名

   nodeTypeString.节点的类型

   ownerDocument.返回DOMDocument对象包含的节点

   text.表示节点包含的文本内容。如果该节点包含其他节点,那么text代表了所有节点的文本内容的组合。

   xml.给出了节点的xml内容,例如:"<FirstName>Rod</FirstName>".

  ChildNodes集合包含了节点的子节点。要给节点增加一个子节点,首先必须给使用DOMDocument对象的节点创建方法,然后将这个新建的节点加入到父节点的childNodes集合中。下面的代码展示了创建一个新的子节点的子程序,并使用父节点的appendChild方法将其加入到父节点中:

' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal indent As Integer, _
ByVal parent As IXMLDOMNode, ByVal node_name As String, _
ByVal node_value As String)
Dim new_node As IXMLDOMNode

' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)

' Set the node's text value.
new_node.Text = node_value

' Add the node to the parent.
parent.appendChild new_node
End Sub
SaveValues 程序

  现在我们可以使用XML创建一个简单的程序(如图1),其值存储到XML文件中,在程序开始运行时,程序从VALUE.XML文件中加载数据,在程序运行结束时,将程序中的现行值存入VALUE.XML文件中。


  下面的代码是显示了VALUE.XML文件的结构:

<Values>
 <FirstName>Rod</FirstName>
 <LastName>Stephens</LastName>
 <Street>1234 Programmer Place</Street>
 <City>Bugsville</City>
 <State>CO</State>
 <Zip>80276</Zip>
</Values>

  List1显示了怎样编写SaveValues,当载入表单时,form_load事件触发LoadValues子程序。
LoadValues创建了一个名为xml_document的DOMDocument对象,然后载入xml文件,使用selectSingleNode方法查找名为values的节点,然后使用GetNodeValue方法获得从value节点后代中得到的值。

  GetNodeValue使用value节点的selectSingleNode方法寻找目标节点,如果节点不存在函数将返回一个缺省值,如果找到这个节点GetNodeValue将返回该节点的text值。对于value.xml文件中的数据节点,text仅仅是包含在节点中的文本内容。

  当窗体卸载时触发form_unload事件,unload事件调用SaveValues子程序。程序创建一个新的DOMDocument对象,该对象创建一个新的名为value的节点,然后用文档的appendChild方法将节点添加到文档中。

  在创建所有新的节点后,SaveValues调用DOMDocument's save方法存储新的xml文件。

  注意这个新的文件已经覆盖了旧文件,使用DOMDocument对象无法部分改变XML文件,可以加载XML文件,然后修改其中一部分,然后保存文件,但原文件将被完全覆盖。这是一个小的缺陷,但在这时可以使用其它程序进行修改。

  List1的最后一部分是CreateNode子程序,CreateNode 为父节点创建一个新节点并同时给这个节点赋值。在这个子程序中首先引用一个DOMDocument对象,然后使用该对象的createElement方法创建一个新的节点。

  createNode方法设置节点的text属性,然后将节点作为子节点添加到父节点中。

List1:

Option Explicit

Private m_AppPath As String

Private Sub Form_Load()
' Get the application's startup path.
m_AppPath = App.Path
If Right$(m_AppPath, 1) <> "\" Then m_AppPath = m_AppPath & "\"

' Load the values.
LoadValues
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Save the current values.
SaveValues
End Sub

' Load saved values from XML.
Private Sub LoadValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode

' Load the document.
Set xml_document = New DOMDocument
xml_document.Load m_AppPath & "Values.xml"

' If the file doesn't exist, then
' xml_document.documentElement is Nothing.
If xml_document.documentElement Is Nothing Then
' The file doesn't exist. Do nothing.
Exit Sub
End If

' Find the Values section.
Set values_node = xml_document.selectSingleNode("Values")

' Read the saved values.
txtFirstName.Text = GetNodeValue(values_node, "FirstName", "???")
txtLastName.Text = GetNodeValue(values_node, "LastName", "???")
txtStreet.Text = GetNodeValue(values_node, "Street", "???")
txtCity.Text = GetNodeValue(values_node, "City", "???")
txtState.Text = GetNodeValue(values_node, "State", "???")
txtZip.Text = GetNodeValue(values_node, "Zip", "???")
End Sub

' Return the node's value.
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

' Save the current values.
Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode

' Create the XML document.
Set xml_document = New DOMDocument

' Create the Values section node.
Set values_node = xml_document.createElement("Values")

' Add the Values section node to the document.
xml_document.appendChild values_node

' Create nodes for the values inside the
' Values section node.
CreateNode values_node, "FirstName", txtFirstName.Text
CreateNode values_node, "LastName", txtLastName.Text
CreateNode values_node, "Street", txtStreet.Text
CreateNode values_node, "City", txtCity.Text
CreateNode values_node, "State", txtState.Text
CreateNode values_node, "Zip", txtZip.Text

' Save the XML document.
xml_document.save m_AppPath & "Values.xml"
End Sub

' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal parent As IXMLDOMNode, _
ByVal node_name As String, ByVal node_value As String)
Dim new_node As IXMLDOMNode

' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)

' Set the node's text value.
new_node.Text = node_value

' Add the node to the parent.
parent.appendChild new_node
End Sub

上一页  1 2 3  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 Visual Basic .NET实现后台处理(下 )
 Visual Basic .NET实现后台处理(上)
 运用VB.net创建Web服务访问程序
 Visual Basic .NET中操作MsAgent
 Visual Basic.NET快速开发MIS系统
 Windows 98/2000下多屏显示技术的实现
 Visual Basic中实现I/O端口控制
 Visual Basic.NET和GDI+共创图标编辑器
 在Visual Basic .NET中使用存储过程
 一步一步创建Visual Basic .NET 控件
 Visual Basic 图形及图像处理
 Visual Basic文件操作处理专辑
 Visual Basic .NET 中的异常处理简介
 Visual Basic 控件及技巧编程
 Visual Basic 硬件与系统设计
 Visual Basic 游戏开发
 Visual Basic 界面设计大观
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!