我正在尝试显示xml文档中的所有节点。到目前为止我所拥有的代码(如下所示)仅显示根节点的两个子节点,这是一个问题,因为大多数子节点也具有子节点。
这是我到目前为止的代码:
Sub countXMLNodes()
Dim xDoc As DOMDocument
Set xDoc = New DOMDocument
If Not xDoc.Load(filepath) Then
MsgBox ("failed to load xml document")
End If
Dim list As IXMLDOMNodeList
Set list = xDoc.SelectNodes("//PropertiesAndDocument")
Dim node As IXMLDOMNode
Dim childNode As IXMLDOMNode
For Each node In list
If (node.HasChildNodes) Then
For Each childNode In node.ChildNodes
MsgBox (childNode.BaseName)
Next childNode
End If
Next node
End Sub
答案 0 :(得分:2)
尝试调整以下示例代码以实现预期目的:
Public Sub LoadDocument()
Dim xDoc As DOMDocument
Set xDoc = New DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("c:/temp/tmp/test.xml") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode xDoc.ChildNodes, 0
Else
' The document failed to load.
' See the previous listing for error information.
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
Debug.Print Space$(Indent) & xNode.ParentNode.NODENAME & _
":" & xNode.nodeTypeString & ":" & xNode.NodeValue
If xNode.HasChildNodes Then
DisplayNode xNode.ChildNodes, Indent
End If
Next xNode
End Sub
来源:http://msdn.microsoft.com/en-us/library/aa468547.aspx#beginner_howuse
我在调整递归代码时遇到了这个例子。在我看来,分享原始示例对我来说更好,这样你就可以尝试自己解决它。如果还不清楚,请告诉我。
我更改了上面代码的一小部分,以实现列出所有XML元素的目标(我使用debug.print,您可以将它们添加到列表中)。对于以下示例:
<lv1>
<lv2>
<lv3>
<lv4> test4 </lv4>
<lv4> test4.2 </lv4>
</lv3>
</lv2>
<lv2> test 2 </lv2>
</lv1>
这给出了下一个结果:
#document:element:
lv1:element:
lv2:element:
lv3:element:
lv4:text: test4
lv3:element:
lv4:text: test4.2
lv1:element:
lv2:text: test 2