recursion genom xml...

XML

2 svar · 372 visningar · startad av mrblonde

Medlem sedan aug. 20012 349 inlägg
Trådstart#1

Function printValue(node As MSXML.IXMLDOMNode)
    
    Dim vlu As MSXML.IXMLDOMNode
    For Each nde In node.childNodes
        btest = nde.hasChildNodes
        sname = nde.nodeName
        If nde.hasChildNodes Then
            printValue nde.childNodes
        Else
            Set vlu = nde.Attributes.getNamedItem("Value")
            Label1.Caption = Label1.Caption & vbCrLf & vlu.nodeValue
        End If
    Next
End Function

---- annan funktion
Dim prm As MSXML.IXMLDOMNode
Set prm = msg.documentElement.getElementsByTagName("PARAMS").Item(0)
    
    printValue prm

Denna enkla kod vill jag använda för att skriva ut de values som finns i mitt fina xml meddelande, (eller i vilket som helst) med det funkar inte alls.

Eftersom jag inte kan sända in en nodelista, osv.. jag är helt förvirrad.

Någon annan måste ju ha traverserat runt i en XML lista någongång, hur fan gör jag!! (i VB )

Medlem sedan juni 20008 205 inlägg
#2

Tja... vad sägs om att loopa igenom nodlistan och göra ett anrop av printValue för varje nod i childNodes, kanske?

Medlem sedan aug. 20012 349 inlägg
#3

hade hoppats på ett med tydligt svar, men jag löste det själv, och eftersom ajg är så snäll får ni se min funktion

Function BindNodeRecursive(ByVal nodeList As MSXML.IXMLDOMNodeList, ByVal dic As Scripting.Dictionary)
    
    On Error GoTo errorHandler
    
    Dim vlu As MSXML.IXMLDOMNode
    Dim node As MSXML.IXMLDOMNode
    
    Dim n As Long
         
    For n = 0 To nodeList.length - 1

        Set node = nodeList.Item(n)
        If node.hasChildNodes Then
            BindNodeRecursive node.childNodes, dic
        Else
            Set vlu = node.Attributes.getNamedItem("Value")
            If dic.Exists(vlu.nodeValue) Then
                vlu.nodeValue = dic(vlu.nodeValue)
            End If
        End If
    Next

    CtxSetComplete
    Exit Function

errorHandler:
    Set vlu = Nothing
    Set node = Nothing
    HandleError g_modName, "BindNodeRecursive"
End Function

Den stoppar in värden från ett dictionary i noderna med, om nu någon undrade :)

247 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
115 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)