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 :

Parcours XML attribut


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Expert Technique Java
    Inscrit en
    Septembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Expert Technique Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 117
    Par défaut Parcours XML attribut
    Bonjour à tous,

    Je vous donne d'abord mon code et vous explique ce qui ne va pas.

    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
    gDossierXmlCourant est un xmlNoeud
    gNoeudCourant est un xmlNoeud
    tableauDeFichier est un tableau de chaînes
    compteur est un entier
    compteur = 0
    gsResNomDossier est une chaîne
    gDossierXmlCourant = paramsXml.zylab.repertoires.repertoire
     
    // Pour chaque repertoire on va regardé son nom et lui faire un traitement particulié
    POUR CHAQUE repertoire DE gDossierXmlCourant 
    	SELON repertoire:name
    		CAS "DP_CF" :
    			gsResNomDossier = "DP_CF"
    		CAS "DA_C" :
    			gsResNomDossier = "DA_C"
    		CAS "DA_S" :
    			gsResNomDossier = "DA_S"
    		CAS "GI_MIXTE_DG" :
    			gsResNomDossier = "GI_MIXTE_DG"
    		AUTRE CAS
    			Erreur("Le nom du dossier xml n'est pas valide pour le transfert")
    	FIN
     
    	// Si le nom du dossier courant est DP_CF
    	SI gsResNomDossier = "DP_CF" ALORS
    		// Tableau permettant d'avoir tous les fichiers
    		tableauDeFichier = fRep("C:\Users\c.charpentier\Desktop\Projet Clément\DP_CF\*.*", frFichier)
    		TANTQUE tableauDeFichier..Vide = Vrai
    			tableauDeFichier = fRep("",  frFichier)
    		FIN
     
    		//On va dans le noeud fichiers du repertoire concerné
    		gNoeudCourant = XMLFils(repertoire:name["DP_CF"].fichiers) // probleme 
    		//Et tant qu'il y a des fichiers dans le tableau courant
    		TANTQUE tableauDeFichier..Vide = Faux
    			// On le place dans le fichier xml
    			XMLAjouteFils(gNoeudCourant,"fichier") //probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"extension", tableauDeFichier[compteur].extension)  // probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"nom", tableauDeFichier[compteur].nom)  // probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"chemin", tableauDeFichier[compteur].chemin) // probleme
    			compteur = compteur + 1
    		FIN
    	FIN
    FIN
    Ce bout de code permet d'allez chercher dans un dossier bien définit tous les fichiers qui s'y trouve.

    Voici le xml

    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
    <zylab>
    	<repertoires>
    		<repertoire name="DP_CF">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="DA_C">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="DA_S">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="GI_MIXTE_DG">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    	</repertoires>
    </zylab>

    Mon problème ce trouve sur bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //On va dans le noeud fichiers du repertoire concerné
    		gNoeudCourant = XMLFils(repertoire:name["DP_CF"].fichiers) // probleme 
    		//Et tant qu'il y a des fichiers dans le tableau courant
    		TANTQUE tableauDeFichier..Vide = Faux
    			// On le place dans le fichier xml
    			XMLAjouteFils(gNoeudCourant,"fichier") //probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"extension", tableauDeFichier[compteur].extension)  // probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"nom", tableauDeFichier[compteur].nom)  // probleme
    			XMLAjouteFils(gNoeudCourant.fichier,"chemin", tableauDeFichier[compteur].chemin) // probleme
    			compteur = compteur + 1
    		FIN
    1er problème _ Je n'ai aucune idée de la syntaxe à avoir pour parcourir le xml jusqu'au nœud qui m’intéresse et surtout ayant l'attribut name qui m’intéresse.

    2ième problème _ je ne sais pas comment avoir accès dans ma boucle au information "nom" "chemin" et "extension" pour chaque fichier.
    Faut-il créer une structure? Si oui comment faire ? Comment trouvé les informations sur ces fichiers ?

    J'espère avoir été assez claire, car on se perd rapidement là dedans^^

    Je reste à votre disposition toutes l'après midi.

    Bien cordialement,
    blooster

  2. #2
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Bonjour,

    Dans ton post précédent je t'ai mis un lien pour l'utilisation des requêtes XPath.
    Ce genre de requêtes répond tout à fait à ton besoin.

    Peux tu nous mettre un exemple complet de ton XML.

  3. #3
    Membre confirmé
    Homme Profil pro
    Expert Technique Java
    Inscrit en
    Septembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Expert Technique Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 117
    Par défaut
    Bonjour Sylvain !

    Oui comme de fait, j'avais été voir ta réponse en début d'après midi.
    Je n'ai pas vraiment regardé comment me déplacé avec XPath mais je vais y bossé dessus d'ici 5 minutes.

    Pour ce qui est d'un exemple concret en xml, je n'en est pas je suis actuellement en phase de test mais ça doit ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <zylab>
    	<repertoires>
    		<repertoire name="DP_CF">
    			<fichiers>
    				<fichier>
    					<extension> .PDF </extension>
    					<nom> factureTVA </nom>
    					<chemin> "C:\\MesDocuments\Projets" </chemin>
    				</fichier>
    			</fichiers>
    		</repertoire>
           </repertoires>
    </zylab>


    Mais bien évidemment, tout doit être automatiser.
    Il faut que je récupère tous les fichiers d'un dossier donné dans un tableau, et pour chaque fichier du tableau créée mon XML ( avec les attributs dit plus haut ).

    Et comment réussir à obtenir ses informations de chaque fichier...

    C'est ça que je n'arrive pas à faire, je suis confronté à deux problèmes.

    ça fais 1 semaine que je suis sous WINDEV donc je débute, et j'ai déjà un gros projet à rendre rapidement, c'est pour ça que je poste souvent mais cela n'empêche en rien mes nombreuses recherches.

    [EDIT] Je viens de regardé pour XPATH je fais des tests, je te tiens au courant. Mais pour mon problème principale concernant l’information des fichiers et comment les structurés etc.. ?

    Cordialement,

  4. #4
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Afin de t'aider dans les requêtes XPath voici un exemple pour que tu obtienne tes infos.

    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
    sPathXml est une chaîne
    sXML est une chaîne
    sXPath est une chaîne
    tabNoeudRepertoire est tableau de chaînes
    nNbFic est entier
     
    sPathXml = "E:\Mon.xml"
    SI PAS fFichierExiste(sPathXml) ALORS
    	Erreur("le fichier '" + sPathXml + "' n'existe pas")
    SINON
    	sXML = fChargeTexte(sPathXml)
    	XMLTermine("DocXML")
    	SI XMLDocument("DocXML", sXML) ALORS
    		//	on recherche tous les noeuds "répertoire" avec pour nom DP_CF ou DA_S
    		sXPath = "//repertoire[@name='DP_CF' or @name='DA_S']"
    		SI XMLExécuteXPath("DocXML",sXPath) ALORS
    			TANTQUE XMLTrouve("DocXML")
    				Trace(XMLPosition("DocXML"))
    				//	on enregistre la position du noeud afin de rechercher les reste des infos.
    				TableauAjoute(tabNoeudRepertoire,XMLPosition("DocXML"))
    				XMLSuivant("DocXML")
    			FIN
    		SINON
    			Erreur("Erreur Xpath",ErreurInfo())
    		FIN
    		POUR i = 1 _A_ TableauOccurrence(tabNoeudRepertoire)
    			sXPath = "count(" + tabNoeudRepertoire[i] + "/fichiers)"
    			SI XMLExécuteXPath("DocXML",sXPath) ALORS
    				SI XMLEnDehors("DocXML") ALORS
    					nNbFic = XMLRésultat("DocXML")
    				FIN
    			SINON
    				Erreur(ErreurInfo())
    			FIN
    			Trace("Il y a " + nNbFic + " pour le répertoire " + XMLLit("DocXML",tabNoeudRepertoire[i]+ "/@name") + " [noeud xml = " + tabNoeudRepertoire[i]+ "]")
    			POUR j = 1 A nNbFic
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/nom"))
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/chemin"))
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/extension"))
     
    			FIN
    		FIN
    	SINON
    		Erreur(ErreurInfo())
    	FIN
    FIN
    N'hésite pas si tu veux des explications.

  5. #5
    Membre confirmé
    Homme Profil pro
    Expert Technique Java
    Inscrit en
    Septembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Expert Technique Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 117
    Par défaut
    Ah super j'ai très bien compris le système avec XPATH grâce ton exemple merci.

    Cependant je crois que je me suis mal exprimé sur un point.
    Si je ne dis pas de bêtise tu vas chercher les infos du fichier dans le xml donné hors ce n'est pas du tout le cas le xml ne contient pas de fichier il n'y a que des dossiers vide.

    Le but de la manœuvre étant de parcourir pour chaque dossier, récupérer les fichiers ainsi que ses informations ( extension , chemin, nom ).
    C'est là que ça change, je pense que la logique du code que tu m'as donné est la bonne sauf pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    POUR j = 1 A nNbFic
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/nom"))
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/chemin"))
    				Trace(XMLLit("DocXML",tabNoeudRepertoire[i] + "/fichiers[" + j + "]/fichier/extension"))
     
    			FIN
    Il faut que j'arrive à trouvé le nom / chemin / extension pour chaque fichier que j'aurai dans mon "tabNoeudRepertoire"

    J'espère avoir été précis, mais en tout cas ton code m'as déjà permis de bien avancé dans la compréhension XML sous windev.

    Bien cordialement,

  6. #6
    Membre confirmé
    Homme Profil pro
    Expert Technique Java
    Inscrit en
    Septembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Expert Technique Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 117
    Par défaut
    @laurent30s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nPosition_point     = Position(sUnFichier,".",0,DepuisFin)
    				nPosition_antislash = Position(sUnFichier,"\",0,DepuisFin)
    				sExtension          = Droite(sUnFichier,Taille(sUnFichier) - nPosition_point + 1)
    				sNom                = Milieu(sUnFichier,nPosition_antislash + 1,nPosition_point - nPosition_antislash - 1)
    				sChemin             = Gauche(sUnFichier,nPosition_antislash)
    C'est pile poil ce qui me manquait mais est-ce que je vais pouvoir lié ce code ( du moins les méthodes ) avec XPATH ? je pense qu'il n'y a pas de problème comme ça reste du XML mais je préfère demandé.

    En tout cas je te remercie je vais testé ça demain et je te tiens au courant.

    Bien cordialement,

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 889
    Par défaut
    En espérant avoir bien compris ce que tu veux faire...

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    sXML  est une chaîne = [
    <zylab>
    	<repertoires>
    		<repertoire name="DP_CF">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="DA_C">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="DA_S">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    		<repertoire name="GI_MIXTE_DG">
    			<fichiers>
    			</fichiers>
    		</repertoire>
    	</repertoires>
    </zylab>
    ]
     
    sNouveau_XML est une chaîne
    sResNomDossier,sUnFichier,sResListeFichier sont des chaînes
    sExtension,sNom,sChemin sont des chaînes
    nPosition_point,nPosition_antislash sont des entiers 
     
    SI XMLDocument("DocXML", sXML) ALORS
    	// on se positionne sur la racine
    	XMLRacine("DocXML")
    	// Boucle de lecture
    	BOUCLE
    		// Recherche des balises <repertoires>
    		XMLRecherche("DocXML","repertoires",XMLBalise)
    		SI XMLTrouve("DocXML") = Faux ALORS SORTIR
    		// On a trouvé une balise <repertoires>
    		XMLFils("DocXML")
    		XMLPremier("DocXML")
    		TANTQUE XMLEnDehors("DocXML") = Faux
    			// On récupère le nom du dossier
    			sResNomDossier = XMLDonnée("DocXML","name")
     
    			// On récupère la liste des fichiers du dossier
    			sResListeFichier = fListeFichier(ChaîneConstruit("C:\Users\c.charpentier\Desktop\Projet Clément\%1\*.*",sResNomDossier),frNonRécursif + frInterruptible)
     
    			// Extraction des chaînes (valeurs des balises) et ajout au fichier xml
    			POUR TOUTE CHAÎNE sUnFichier DE sResListeFichier SEPAREE PAR RC
    				// On extrait les chaines (valeurs des balises)
    				nPosition_point     = Position(sUnFichier,".",0,DepuisFin)
    				nPosition_antislash = Position(sUnFichier,"\",0,DepuisFin)
    				sExtension          = Droite(sUnFichier,Taille(sUnFichier) - nPosition_point + 1)
    				sNom                = Milieu(sUnFichier,nPosition_antislash + 1,nPosition_point - nPosition_antislash - 1)
    				sChemin             = Gauche(sUnFichier,nPosition_antislash)
     
    				// On se positionne pour ajouter les balises et données au bon endroit du xml
    				XMLFils("DocXML")
    				XMLSuivant("DocXML")
     
    				// Ajout dans le fichier xml
    				XMLAjouteFils("DocXML","fichier","",Vrai)
    				XMLAjouteFils("DocXML","extension",sExtension)
    				XMLAjouteFils("DocXML","nom",sNom)
    				XMLAjouteFils("DocXML","chemin",sChemin)
     
    				// Remonte de 2 niveau pour le prochain fichier
    				XMLParent("DocXML")
    				XMLParent("DocXML")
    			FIN				
    			XMLSuivant("DocXML")
    		FIN
    		// On remonte au niveau des repertoires
    		XMLParent("DocXML")		
    	FIN
    FIN
     
    sNouveau_XML = XMLConstruitChaîne("DocXML")
    XMLTermine("DocXML")
    Plus qu'à sauver sNouveau_XML là où tu le souhaites...

Discussions similaires

  1. [C#][XML] parcours XML débutant
    Par loic_86 dans le forum C#
    Réponses: 5
    Dernier message: 03/04/2011, 12h46
  2. Réponses: 5
    Dernier message: 20/08/2006, 14h41
  3. [XML] attribut dans l'élément racine
    Par gabychon dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/04/2006, 14h44
  4. [XERCES] parcours d'attributs
    Par mister3957 dans le forum XML
    Réponses: 4
    Dernier message: 09/02/2006, 17h35
  5. Parcours xml
    Par jeff_! dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 30/11/2005, 17h08

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