以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  我的程序请高手版主修改下 [讨论]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=28273)


--  作者:cwjmx
--  发布时间:3/8/2006 10:11:00 AM

--  我的程序请高手版主修改下 [讨论]
我的程序请高手版主修改下

小虾,最近在做个题目为,从VB中读取xml文件中的元素,已经做的差不多了,但遇到个问题,例如:
<cj>
<ab>
<k1>2378</k1>
<k2>89</k2>
</ab>
<ab>
<k1>7845</k1>
<k2>89</k2>
</ab>
<ab>
<k1>8989</k1>
<k2>89</k2>
</ab>
</cj>
只能读取第一个k1标记里的数据,无法读取下面的请,帮我修改下,大侠,小虾感激不禁!
我的vb程序如下:
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 & "Online00.xml"
  If xml_document.documentElement Is Nothing Then

    Exit Sub

  End If

  '寻找节点
  Set values_node = xml_document.selectSingleNode("ab")
  ' 读取各个节点的值
  txtName.Text = GetNodevalue(values_node, "k1", "???")
  txtName.Text = GetNodevalue(values_node, "k1", "???")
  txtName.Text = GetNodevalue(values_node, "k1", "???")
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("ab")
  xml_document.appendChild values_node
  CreateNode values_node, "k1", txtName.Text
  CreateNode values_node, "k1", txtSex.Text
   ' 保存XML文件
  xml_document.save p_AppPath & "Online00.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


--  作者:Qr
--  发布时间:3/13/2006 11:22:00 AM

--  
Set value_node = start_at_node.selectSingleNode(".//" & node_name)   (1)
  If value_node Is Nothing Then
    GetNodevalue = default_value
  Else
    GetNodevalue = value_node.Text  (2)
End If

(1):selectSingleNode()只能读取一个节点,改用selectNodes()。
(2):用循环输出GetNodevalue下各节点内容。
本人没有VB环境,只给理论:)


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms