我有一个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,需要再循环一次。 任何人都可以帮助我吗?
答案 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>