【发布时间】:2014-07-08 11:20:47
【问题描述】:
我正在尝试在列表框的一列中使用 XML 文件中的所有 XML 节点填充列表框,然后在列表框的第二列中具有相应节点的值。
所以,例如:
第一栏 |第二栏
名字 |约翰
姓氏 |史密斯
(可怕的格式,但只是想给你一个粗略的想法)
我已经完成了第一部分,并在一列中列出了所有 XML 节点名称,但是我在后面部分遇到了困难。
这是我目前的代码:
Public Sub LoadDocument()
Dim xDoc As DOMDocument
Set xDoc = New DOMDocument
xDoc.validateOnParse = False
If xDoc.Load(filepath) Then
DisplayNode xDoc.ChildNodes
Else
' The document failed to load.
' See the previous listing for error information.
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As IXMLDOMNodeList)
Dim xNode As IXMLDOMNode
For Each xNode In Nodes
If xNode.nodeName = "#text" Then
Else
With xnodeListBox
.AddItem (xNode.nodeName)
.list(.ListCount - 1, 1) = (xNode.nodevalue)
End With
If xNode.HasChildNodes Then
DisplayNode xNode.ChildNodes
End If
End If
Next xNode
End Sub
这一行是问题点:
.list(.ListCount - 1, 1) = (xNode.nodevalue)
谁能帮我解决这个问题?
编辑:
我相信我想通了。
我认为发生的事情是这样的:第一个节点将包含文档的全部内容,因此它会有大量的字符。这意味着第一个节点的内容无法存储,并且使用前面的代码,不会移动到其他节点上。这可能只是特定于我正在处理的 XML 文件的限制。
为了防止这种情况发生,我将代码更改为:
Public Sub DisplayNode(ByRef Nodes As IXMLDOMNodeList)
Dim xNode As IXMLDOMNode
For Each xNode In Nodes
If xNode.nodeName = "#text" Then
Else
With xnodeListBox
.AddItem xNode.nodeName
If (Len(xNode.nodeTypedValue) < 300) Then
.list(row, 1) = xNode.nodeTypedValue
End If
row = row + 1
End With
End If
If xNode.HasChildNodes Then
DisplayNode xNode.ChildNodes
End If
Next xNode
End Sub
【问题讨论】: