Archief - [PROG]VB6.0. recursiviteit

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

DesorteD

Legacy Member
kheb hier een recursieve functie die uit een xml file de node met nodenaam "datablock" zou moeten teruggeven.

de functie geeft nix terug...
de parameter die wordt meegegeven is de node met nodename1(zie xml voorbeeld), het eerste kindnode(nodename10) van deze node wordt nog ingelezen maar daarna valt de functie stil.

Private Function getDatasetNode(nodeParent As MSXML2.IXMLDOMNode) As MSXML2.IXMLDOMNode

If nodeParent.nodeName = "datablock" Then
getDataSetNode = nodeParent
Exit Function
End If

Dim childnode As MSXML2.IXMLDOMNode
For Each childnode In nodeParent.childNodes
getDataSetNode = getDataSetNode(childnode)
If (getDataSetNode.nodename = "datablock") Then
Exit Function
End If
Next childnode

End Function


de xml files zien er gewoonlijk zo uit

<?xml version="1.0" ?>
<nodename1 attr1="value1" attr2="value2" attr3="value3" >
<nodename10 attr10="value10" attr20="value20" attr30="value30" />
<nodenade11 attr11="value11" attr21="value21" attr31="value31" />
<nodename12 attr12="value12" attr22="value22" attr32="value32" />
<nodename13 attr13="value13" attr23="value23" attr33="value33" />
<datablock>
<.....>
</datablock>
</nodename1>

Asshen

Legacy Member
Code:
For Each childnode In nodeParent.childNodes
    [B]getDataSetNode = getDataSetNode(childnode)[/B]
    If (getDataSetNode.nodename = "datablock") Then
      Exit Function
    End If
Next childnode

Ik denk dat bovenstaande de boosdoener is (in vet) :)
Je wil ALLE nodes overlopen (op t eerste zicht), maar vanals je een eerste node tegenkomt, dan returnt je functie al.

DesorteD

Legacy Member
als ik het dan zo oplos, werkt het nog altijd niet.
blijft die "steken" op dezelfde plaats waardie vorige keer ook stopte

Private Function getDatasetNode(nodeParent As MSXML2.IXMLDOMNode) As MSXML2.IXMLDOMNode

If nodeParent.nodeName = "datablock" Then
getDataSetNode = nodeParent
Exit Function
End If

Dim childnode As MSXML2.IXMLDOMNode
For Each childnode In nodeParent.childNodes
If (getDataSetNode(childnode).nodename = "datablock") Then
getDataSetNode = getDataSetNode(childnode)
Exit Function
End If
Next childnode

End Function

Wii

Legacy Member
Waarom werk je niet met xpath expressions?
Dan doe je gewoon articleDoc.selectSingleNode("//datablock")
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan