IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] XML, fonction récursive de recherche


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut [VB6] XML, fonction récursive de recherche
    Bonjour,
    j'ai un pb, j'ai fais au moins 5 fonctions qui permettent de trouver un "text" ou un "attibut" dans dans un ou des tags.. en fait je fait une fonction pour chaque profondeur, mais il n'y aurrai pas moyen de trouver ça direct de manière récusive? je sèche!
    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Function cherche_text_return_char_2(TagName_1_ As String, TagName_2_ As String, text_ As String, num As Long) As String
    ' fonction renvoiant une chaine de caractères du fichier xml désigné par les trois balises données
    Dim Indice As Integer
    Dim taille As Integer
    Dim myStr As String
    Dim xmlElement As MSXML2.IXMLDOMElement
    Dim textNode As MSXML2.IXMLDOMElement
    Dim textNode_2 As MSXML2.IXMLDOMElement
    Dim textNode_3 As MSXML2.IXMLDOMElement
     
    Indice = 0
    
    
    Set xmlElement = xmlDoc.documentElement
            For Each textNode In xmlElement.getElementsByTagName(TagName_1_)
                For Each textNode_2 In textNode.getElementsByTagName(TagName_2_)
                    For Each textNode_3 In textNode.getElementsByTagName(text_)
                            If Indice = num Then
                                cherche_text_return_char_2 = textNode_3.Text
                                GoTo fin_cherche_text_return_char_2
                            End If
                        Indice = Indice + 1
                    Next
                Next
            Next
    fin_cherche_text_return_char_2:
      
    
    
    End Function
    si je veut un entier je refais la fonction... avec integer à la place, et si il y à trois enfants, encore une autre fonction... ya pas moyen?
    merci d'avance

  2. #2
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Bonjour

    Il me semble que tu pourrais t'inspirer d'une fonction récursive permettant de parcourir les branche d'u Treeview. Une telle fonction est présentée et expliquée dans le praticiel "Le Treeview et vous" accessible en signature.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    j'espere que cet exemple pourra t'aider


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Dim oDoc As DOMDocument
     
    Private Sub CommandButton1_Click()
    Set oDoc = New DOMDocument
    oDoc.async = False
    oDoc.Load "C:\Documents and Settings\michel\dossier\\monFichier.xml"
     
    BoucleElements oDoc.documentElement
     
    End Sub
     
     
    Private Function BoucleElements(oElem As IXMLDOMNode)
    Dim NdListe As IXMLDOMNodeList
    Dim i As Long
     
    Select Case oElem.nodeType
     
    Case NODE_ELEMENT 'type Element
    Debug.Print _
    "NODE_ELEMENT : "; oElem.nodeName & " - " & extractionAttributs(oElem)
     
    Case NODE_TEXT 'type texte
    Debug.Print oElem.nodeValue
     
    Case NODE_CDATA_SECTION 'type Cdata
    Debug.Print "NODE_CDATA : " & oElem.nodeValue
     
    Case Else
    Debug.Print oElem.nodeType & " - " & oElem.nodeName
    End Select
     
    Set NdListe = oElem.childNodes 'boucle récursive pour les noeuds enfants
     
    For i = 0 To NdListe.Length - 1
    BoucleElements NdListe.Item(i)
    Next i
    End Function
     
     
     
    Private Function extractionAttributs(x As IXMLDOMNode) As String
    Dim Resultat As String
    Dim i As Long
     
    Resultat = ""
     
    For i = 0 To x.Attributes.Length - 1 'boucle sur tous les attributs
    Resultat = Resultat & x.Attributes.Item(i).nodeName & "='" & _
    x.Attributes.Item(i).nodeValue & "' "
    Next i
     
    extractionAttributs = Resultat
     
    End Function


    bonne soiree
    michel

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pourquoi tu n'utilises pas XPath ce serait beaucoup plus générique.
    Je me lance mais sans filet, je poste depuis Linux à la maison et je n'ai donc pas de VB sous la main, au boulot j'aurais VB mais pas internet donc soyez indulgents je fais tout de mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim nodElement as MSXML2.IXMLDOMElement
    Set nodElement =xmlDoc.documentElement.SelectSingleNode("monPremierNoeud/MonNoeudFils/MondeuxiemeNiveau")
    if nodElement Is Nothing Then<div style="margin-left:40px">Debug.Print "On n'a pas réussi à trouver ce noeud"</div>Else<div style="margin-left:40px">Debug.Print "La valeur du noeud cherchée est :";nodElement.Text</div>End If
    Et là la récursivité ce n'est pas toi qui la code c'est MSXML2.

    Personnellement j'ai fait une fonction qui me renvoie le texte d'un noeud dont le XPath est passé en paramètre.
    Et une autre qui fait la même chose mais converti en entier.
    A+
    Soazig

Discussions similaires

  1. Recherche à l'aide d'une fonction récursive
    Par Phoenix89 dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 24/04/2014, 10h58
  2. Réponses: 2
    Dernier message: 19/04/2013, 09h24
  3. [Free Pascal] Fonction récursive de recherche dichotomique
    Par fleurose dans le forum Free Pascal
    Réponses: 4
    Dernier message: 13/04/2011, 19h55
  4. Afficher du XML dans une table HTML avec fonction récursive (ou pas)
    Par iviewclear dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 19/04/2010, 17h04
  5. Réponses: 2
    Dernier message: 17/06/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo