在VBScript中循环浏览DOMDocument

在VBScript中循环浏览DOMDocument,dom,vbscript,asp-classic,domdocument,Dom,Vbscript,Asp Classic,Domdocument,由于某种原因,我在任何地方都找不到这个问题的简单答案 给定任何文档,例如 粗体 我只想循环遍历每个节点并打印节点名,列出所有属性名及其值(如果有的话)。e、 g.上述代码段将输出: root div id = value name = arga b 我能找到的每个示例都涉及到选择特定节点和特定命名属性 这是我到目前为止所做的,但递归使用时会失败 Dim oDoc : Set oDoc = Server.CreateObject("MSXML2.DOMDocument.6.0")

由于某种原因,我在任何地方都找不到这个问题的简单答案

给定任何文档,例如

粗体
我只想循环遍历每个节点并打印节点名,列出所有属性名及其值(如果有的话)。e、 g.上述代码段将输出:

root div id = value name = arga b 我能找到的每个示例都涉及到选择特定节点和特定命名属性

这是我到目前为止所做的,但递归使用时会失败

Dim oDoc : Set oDoc = Server.CreateObject("MSXML2.DOMDocument.6.0")

If oDoc.LoadXML("<root d=""sdfgf""><div id=""asdfadfA"">slkdfhga</div><div id=""asdfadfA"">slkdfhga<b>this</b></div></root>") Then
echo traverse(oDoc.documentElement)
End If

Function traverse(n)

    Dim s

    s = s & typename(n) & "<br />"
    s = s & n.nodename & "<br />"
    s = s & n.nodetype & "<br />"

    'any attributes?
    Set oAttributes = n.attributes
    If isObject(oAttributes) Then 
        If oAttributes.length > 0 Then 
            'print attribs
            s = s & "---> has attributes <br />"
            For each oAttribute in oAttributes
                s = s & "--->" & oAttribute.Name & " = " & oAttribute.Value
            Next 
        End If
    End If

    'any children? 
    For Each oChildNode in n.childNodes
        'print child
        s = s & typename(oChildNode) & "<br />"
        s = s & oChildNode.nodename & "<br />"

        'recursive
        s = s & traverse(oChildNode)
    Next


    traverse = s.Value

End Function
Dim-oDoc:Set-oDoc=Server.CreateObject(“MSXML2.DOMDocument.6.0”)
如果是oDoc.LoadXML(“slkdfhgaslkdfghgathis”),那么
回音遍历(oDoc.documentElement)
如果结束
函数遍历(n)
暗淡的
s=s&typename(n)和“
” s=s&n.nodename&“
” s=s&n.nodetype&“
” “有什么特征吗? 设置属性=n个属性 如果是isObject(oAttributes),则 如果oAttributes.length>0,则 “打印属性” s=s&-->具有属性
每种燕麦的贡品都是燕麦贡品 s=s&“-->”&oAttribute.Name&“=”&oAttribute.Value 下一个 如果结束 如果结束 “有孩子吗? 对于n.childNodes中的每个oChildNode “打印孩子 s=s&typename(oChildNode)和“
” s=s&oChildNode.nodename&“
” “递归的 s=s和导线测量(oChildNode) 下一个 遍历=s.值 端函数
您不可能看得太远,大量的示例都是如何做到这一点的
documentElement
将为您提供根元素,然后使用
.childNodes
向下导航结构。Hmm可能重复,这个问题不一样。在其中,代码提取特定的命名属性。我的问题是寻找通用的“通过一切循环”更新的问题,更详细,它的所有工作。问题是随着节点的循环,当节点类型不是很好的时候,你必须检查孩子和属性,听到你已经排序它,考虑张贴一个答案没有错误的自我回答,事实上它是被鼓励的。
Dim oDoc : Set oDoc = Server.CreateObject("MSXML2.DOMDocument.6.0")

If oDoc.LoadXML("<root d=""sdfgf""><div id=""asdfadfA"">slkdfhga</div><div id=""asdfadfA"">slkdfhga<b>this</b></div></root>") Then
echo traverse(oDoc.documentElement)
End If

Function traverse(n)

    Dim s

    s = s & typename(n) & "<br />"
    s = s & n.nodename & "<br />"
    s = s & n.nodetype & "<br />"

    'any attributes?
    Set oAttributes = n.attributes
    If isObject(oAttributes) Then 
        If oAttributes.length > 0 Then 
            'print attribs
            s = s & "---> has attributes <br />"
            For each oAttribute in oAttributes
                s = s & "--->" & oAttribute.Name & " = " & oAttribute.Value
            Next 
        End If
    End If

    'any children? 
    For Each oChildNode in n.childNodes
        'print child
        s = s & typename(oChildNode) & "<br />"
        s = s & oChildNode.nodename & "<br />"

        'recursive
        s = s & traverse(oChildNode)
    Next


    traverse = s.Value

End Function