如何读入XML文档中的所有节点?

时间:2014-05-15 10:29:00

标签: xml vba

我正在尝试显示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

1 个答案:

答案 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