Scripting 如何遍历DOM对象?

Scripting 如何遍历DOM对象?,scripting,vbscript,Scripting,Vbscript,我需要遍历DOM对象,并在其中显示文本,而不显示任何副本 例如: <div> <div>hello <div>welcome</div> hai </div> 123 </div> 如何在VBScript中实现这一点 实际上,我尝试过递归,但它似乎不能正常工作 function traverse(allnode) for each node in allnode if n

我需要遍历DOM对象,并在其中显示文本,而不显示任何副本

例如:

<div>
      <div>hello
      <div>welcome</div>
      hai
     </div>
123
</div>
如何在VBScript中实现这一点

实际上,我尝试过递归,但它似乎不能正常工作

function traverse(allnode)

for each node in allnode
  if node.hasChildNodes then
      traverse(node.childNodes)
  else
      Msgbox node.nodeValue
  end if
end function
此函数将文本打印一次以上,即针对每个div元素。如何在VBScript中实现它?

给定以下HTML:

<html>
 <body>
  <div>
   <div>
    hello
    <div>welcome</div>
    hai
   </div>
   123
  </div>
  <p>noli me tangere</p>
 </body>
</html>
通过遍历M00 oDOM,0导致

 #document
  HTML
   HEAD
    TITLE
    /TITLE
   /HEAD
   BODY
    DIV
     DIV
      #text
      /#text
      DIV
       #text
       /#text
      /DIV
      #text
      /#text
     /DIV
     #text
     /#text
    /DIV
    P
     #text
     /#text
    /P
   /BODY
  /HTML
 /#document
本小节显示递归DOM遍历的基本结构。如果你把它和你的函数做比较,为什么是函数?,你会看到

你错过了下一个机会 在循环之前,必须检查是否有子节点 基于遍历代码结构,很容易得出

Sub traverseDom01(ndX, aRes)
  If ndX.hasChildNodes Then
     Dim ndY
     For Each ndY In ndX.childNodes
         traverseDom01 ndY, aRes
     Next
  End If
  If "#text" = ndX.nodeName Then
     If "DIV" = ndX.parentNode.nodeName Then
        ReDim Preserve aRes(UBound(aRes) + 1)
        aRes(UBound(aRes)) = Trim(ndX.nodeValue)
     End If
  End If
End Sub
收集一个名为via的分区的子分区的文本

  Dim aDTs : aDTs = Array()
  traverseDom01 oDOM, aDTs
  WScript.Echo "|" & Join(aDTs, "|") & "|"
结果是

|hello|welcome|hai|123|
  Dim aDTs : aDTs = Array()
  traverseDom01 oDOM, aDTs
  WScript.Echo "|" & Join(aDTs, "|") & "|"
|hello|welcome|hai|123|