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 :

XML + Plus bas niveau


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut XML + Plus bas niveau
    Bonjour,
    J'ai fait une fonction qui parcours un xml pour récupérer des attributs et leurs valeurs et je souhaite trouver le moyen d'automatiser la descente dans les fils et la boucle que j'effectue.

    Ma procédure est générique pour une arborescence comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DOCUMENT>
      <INVENTORYS>
          <INVENTORY attr1="ValA" attrx="valZ" />
          <INVENTORY attrN="valN" />
      </INVENTORYS>
    </DOCUMENT>
    et ce quel que soit le nom des balises et des attributs.

    Le problème survient avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DOCUMENT>
      <INVENTORYS>
          <INVENTORY>
             <INVN_STYLE attr1="val1" attr2="val2" />
             <INVN_SBS attr1="valx" attr2="val2" />
          </INVENTORY>
      </INVENTORYS>
    </DOCUMENT>
    Je ne vois pas comment adapter ma procédure pour gérer des format de XML divers..

    ps : 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
    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
     
    MonDoc est une chaîne = fChargeTexte("Fichiers de test/Inventory.xml")
    XMLDocument("DocXML", MonDoc)
     
    tabNomBalise est un tableau de chaînes
     
    XMLPremier("DocXML")
    XMLFils("DocXML")
    XMLFils("DocXML")
    XMLFils("DocXML")
     
    TANTQUE XMLEnDehors("DocXML") = Faux
    	i++
    	XMLSuivant("DocXML")
    FIN
     
    XMLParent("DocXML")
    XMLParent("DocXML")
    XMLParent("DocXML")
     
    XMLPremier("DocXML")
     
    // Document
     
    XMLFils("DocXML")
    sBaliseSup = XMLNomElément("DocXML") 
    // ex DCSS	
    XMLFils("DocXML")
    TANTQUE XMLEnDehors("DocXML") = Faux
     
     
    	sBaliseTable = XMLNomElément("DocXML")
    	// ex DCS
     
    	XMLFils("DocXML")
     
    	POUR j = 1 _A_ i-1
     
    		// Récupère le nom de l'élément en cours
     
    		tabTabval[j][1] = XMLNomElément("DocXML")
     
    		// Récupère la valeur de l'élément
    		tabTabval[j][2] = XMLLit("DocXML", sBaliseSup + "/" + sBaliseTable + "[" + nCpt + "]" +"/@" + tabTabval[j][1])
     
    		XMLSuivant("DocXML")
    	FIN 	
     
    		/// Ajout
     
    	POUR nV = 1 _A_ (i-1)
    		{sBaliseTable + "." + tabTabval[nV][1],indRubrique} = tabTabval[nV][2]
     
    	FIN
    	bRestest = HAjoute(sBaliseTable)	
    	SI bRestest = 0 ALORS
    		// erreur
    		Trace(HErreur())
    	FIN
     
    	// Suite
     
     
    	XMLParent("DocXML")
    	//trace(XMLNomElément("DocXML"))
    	nCpt++	
    	XMLSuivant("DocXML")
     
    FIN
    J'ai pensé essayer de trouver un moyen d'atteindre le plus bas niveau pour récupérer les attributs, mais comment savoir de combien remonter après.

    Je pense que ce sera difficile à automatiser...

    Existe t-il une fonction qui permet de savoir si on a atteint le nœud le plus bas ??

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Il faudrait préciser quel est ton objectif, si c'est simplement de lire les Noms et Valeurs des attributs, sans connaitre le chemin qui y mène, le plus simple est d'utiliser XPath, avec une requête du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    XMLExecuteXPath("DocXml", "//@*")
     
    TANT QUE XMLTrouve("DocXml")
        ... ton code ici ...
        XMLSuivant("DocXml")
    FIN
    Pour plus d'info sur XPath :
    http://www.w3schools.com/xpath/xpath_intro.asp

    Bob.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut
    Tout d'abord merci pour ton aide.
    En fait ce que je veux faire, c'est parcourir un fichier XML (J'ai a peu près 5 structures différentes), repérer quelles infos sont à ajouter dans quelles tables, et les intégrer.

    Par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DOCUMENT>
      <INVENTORYS>
          <INVENTORY>
             <INVN_STYLE attr1="val1" attr2="val2" />
             <INVN_SBS attr1="valx" attr2="val2" />
          </INVENTORY>
      </INVENTORYS>
    </DOCUMENT>
    Dans la table INVN_STYLE, je voudrais insérer l'enregistrement (val1,val2) et dans INVN_SBS (valx,val2)

    Ce que je cherche c'est la généricité.

    Pour savoir si une balise représente une table de mon appli j'utilise Hfichierexiste.

    Mais je me demande si une seule fonction peut gérer à la fois une structure XML multi tables comme précédement ET une structure monotable comme ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DOCUMENT>
      <TABLES>
          <TABLE attr1="ValA" attrx="valZ" />
          <TABLE attrN="valN" />
      </TABLES>
    </DOCUMENT>
    Qu'en pensez vous ?

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Avec XPath, tu peux sélectionner les Balises qui ont des attributs, et donc obtenir directement les balises qui t'intéresses, sans coder le parcours de toutes la hiérarchie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XMLExecuteXpath("DocXml", "//*[@*]")
    A noter, que pour chaque balise obtenue, si tu veux analyser les attributs, tu seras peut-etre obliger de jonglet avec des sous-document xml. A verifier.

    Bob.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut
    tu veux dire qu'il est possible de créer des sous documents à partir d'un document xml ? Si c'est le cas ca m'aiderais beaucoup car je récupèrerais les balises correspondant à mes tables et je les insérerais tout bêtement dans mes fichiers.
    Ce serait encore plus simple

  6. #6
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Cf la doc de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XMLExtraitDocument

    Bob.

Discussions similaires

  1. Marché du PC : les ventes atteignent leur plus bas niveau depuis 2009
    Par Hinault Romaric dans le forum Actualités
    Réponses: 28
    Dernier message: 16/04/2015, 14h10
  2. Le spam atteint son plus bas niveau depuis 3 ans
    Par Hinault Romaric dans le forum Sécurité
    Réponses: 6
    Dernier message: 08/12/2011, 17h12
  3. Réponses: 2
    Dernier message: 18/11/2010, 21h49
  4. Accéder le plus "bas niveau" aux Data base ?
    Par pdaures dans le forum Général Java
    Réponses: 2
    Dernier message: 25/06/2009, 16h03

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