VBScript:如何使用vbscript动态迭代到xml文件的子节点

时间:2016-05-09 12:10:52

标签: xml vbscript

我有一个xml文件,其根节点有子节点,子节点可能有自己的子节点,而子节点又有其他子节点,依此类推。像child1是父母的孩子,child2是child1的孩子,依此类推

结构如下

<parent>
    <child1>
        <child2>
            <child3>
            </child3>
        </child2>
    </child1>
</parent>

问题是我不知道节点的嵌套级别,即一个子节点内的子节点数量 我想从xml文件中动态读取节点

目前我正在使用此vbscript代码

set x=xmlDoc.documentElement
 msgbox "Nodename: " & x.nodeName & vbNewLine 
set y=x.childNodes

for i=0 to y.length-1
 msgbox "Nodename: " & y(i).nodeName & vbNewLine 

 for z=0 to y(i).childNodes.length-1
   msgbox "Nodename: " & y(i).childNodes(z).nodeName & vbNewLine
 next
next

但是为此需要提前知道嵌套级别,因此需要循环次数。 示例:上面的代码可以读取child1以读取child2,它需要再添加一个循环,因此对于child3,需要再循环一次。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

根据我上面的评论,你想要一个简单的recursive function之类的东西应该给你一个起点。

Dim xml: xml = "<parent><child1><child2><child3></child3></child2></child1></parent>"
Dim xmldoc : Set xmldoc = CreateObject("Msxml2.DOMDocument.6.0")

If xmldoc.LoadXML(xml) Then
  Call MapNodes(xmldoc)
End If

'Recursive sub procedure that takes a Node as input.
Sub MapNodes(CurrentNode)
  Dim Node

  If IsObject(CurrentNode) Then
    If CurrentNode.HasChildNodes() Then
      For Each Node In CurrentNode.childNodes
        WScript.Echo "<" & Node.nodeName & ">"
        'Do we have ChildNodes? Call the procedure again this time
        'passing the Node we are currently checking.
        If Node.HasChildNodes() Then Call MapNodes(Node)
        WScript.Echo "</" & Node.nodeName & ">"
      Next
    End If
  End If
End Sub

输出:

<parent>
<child1>
<child2>
<child3>
</child3>
</child2>
</child1>
</parent>