webForumDet fria alternativet

recursion genom xml...

2 svar · 355 visningar · startad av mrblonde

mrblondeMedlem sedan aug. 20011 386 inlägg
#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 )

------------------
National Blonde Day!
Alle ihre Basis ist uns gehört.

spangoMedlem sedan juni 20006 147 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?

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

mrblondeMedlem sedan aug. 20011 386 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 :)

------------------
National Blonde Day!
Alle ihre Basis ist uns gehört.

Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb