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

WinDev Discussion :

Encore un problème de XML [WD18]


Sujet :

WinDev

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut Encore un problème de XML
    Bonjour,
    décidément, cette gestion du Xml dans Windev me cause des soucis...
    Mon fichier Xml se présente ainsi (extrait):
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Files>
    <File md5="012345">XML\Monfichier.xml</File>
    <File md5="012345">XML\Monfichier2.xml</File>
    <File md5="012345">XML\Monfichier3.xml</File>
    </Files>
    Je souhaite boucler sur chaque sous-élément <File> jusqu'au dernier.
    J'ai écrit ceci (avant l'appel de ce code, la position dans le document Xml est sur la balise-mère <Files>):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    XMLFils("DocXML")
    TANTQUE XMLNomElément("DocXML") = "File"
    	sFichier est une chaîne = XMLDonnée("DocXML","")
    	sMD5 est une chaîne = XMLDonnée("DocXML","md5")
    	gtaFichiersMod[sFichier] = sMD5
    	XMLSuivant("DocXML")	
    FIN
    Et là, il boucle sans fin... Je me suis rendu compte qu'il trouve bien toutes les balises <File> mais reste indéfiniment bloqué sur la dernière.
    J'ai alors écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    XMLFils("DocXML")
    TANTQUE XMLNomElément("DocXML") = "File"
    	sFichier est une chaîne = XMLDonnée("DocXML","")
    	sMD5 est une chaîne = XMLDonnée("DocXML","md5")
    	gtaFichiersMod[sFichier] = sMD5
    	SI XMLDernier("DocXML") = Faux ALORS 
    		XMLSuivant("DocXML")
    	SINON
    		SORTIR	
    	FIN
    FIN
    Et là, il sort directement après la première balise <File> !!
    Comment faire pour boucler sur toutes les balises <File> et sortir quand il n'y en a plus ?

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Avec XMLLit() c'est plus facile...

    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
    sXML  est une chaîne = [
    <Files>
    <File MD5="012345">XML\MonFichier.xml</File>
    <File MD5="012345">XML\Monfichier2.xml</File>
    <File MD5="012345">XML\Monfichier3.xml</File>
    </Files>
    ]
    // tu peux faire un
    // sMonDoc = fChargeTexte(Tonfichier.xml)
     
    XmlDocument("DocXML",sXML)
     
    sXPath est une chaîne
    nNb_Field est un entier
    sAttribut est une chaîne
    sValeur est une chaîne
    i est un entier
     
    // requête XPATH nous retourne le nombre d'élément
    sXPath = "count(/Files/File)"
    SI XMLExécuteXPath("DocXML",sXPath) ALORS
    	SI XMLEnDehors("DocXML") ALORS
    		nNb_Field = XMLRésultat("DocXML")
    	FIN
    SINON
    	Erreur(ErreurInfo())
    FIN
     
    // boucle de parcours des éléments
    POUR i = 1 A nNb_Field
    	// récup attribut
    	sAttribut = XMLLit("DocXML","/Files/File["+i+"]/@md5")
    	// récup valeur
    	sValeur = XMLLit("DocXML","/Files/File["+i+"]") 
    	Info("Nom    = "+ sAttribut + RC + "Valeur = " + sValeur)
    FIN
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Super ! Merci.
    J'aurais juste aimé savoir pourquoi mon code ne marche pas...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    En fait, XMLDernier pointe sur la dernière balise du document Xml et non pas sur la dernière balise du niveau où l'on se trouve...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    J'ai finalement résolu mon problème sans passer par XMLLit, en beaucoup plus concis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sFichier,sMD5 est une chaîne		
    XMLFils("DocXML")
    BOUCLE
    	sFichier = XMLDonnée("DocXML","")
    	sMD5 = XMLDonnée("DocXML","md5")
    	gtaFichiersMod[sFichier] = sMD5
    	XMLRecherche("DocXML","File",XMLBalise + XMLNiveauCourant,XMLExact)
    A FAIRE TANTQUE XMLTrouve("DocXML")
    Ça marche nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 31/12/2007, 23h26
  2. Encore des problèmes de variables
    Par mat99 dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2005, 10h26
  3. Problème avec XML.Clear dans un TXMLDocument
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/01/2005, 11h45
  4. Réponses: 8
    Dernier message: 10/08/2004, 11h49
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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