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

Flash Discussion :

[FLASH MX] xpath.XPathAPI


Sujet :

Flash

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut [FLASH MX] xpath.XPathAPI
    Salut,

    j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Noeud= mx.xpath.XPathAPI.selectNodeList(this.firstChild,chemin);
    la trace me renvoi bien le noeud sélectionné,
    ...<assure police="4612"><nom>GABAIX-HIALE</nom><prenom>MICHEL</prenom><dateEffet>22.08.2005</dateEffet>...
    j'essayes de récupérer la valeur de l'élèment nom de noeud, mais j'ai pas la bonne syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     var Vnom  = Noeud.nodeName["nom"].nodeValue;
    Merci de votre aide

  2. #2
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Pour que l'on t'aide efficacement le mieux c'est que tu fasses un petit test à part avec un xml super simple et juste le code qui te cause problème
    Met le code et le xml sur le forum et je pourrai t'aider rapidement
    Là je me sens pas de faire un xml etc.... surtout que dans ce que tu mets au dessus :
    chemin il viend d'où ? là avec ce que j'ai au dessus j'en sais rien ?
    EKA+

  3. #3
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    ok;
    fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ASSURES>
    - <assure police="4612">
      <nom>DURANT</nom> 
      <prenom>MICHEL</prenom> 
      </assure>
    <assure police="4613">
      <nom>DUPONT</nom> 
      <prenom>MICHEL</prenom> 
      </assure>
      </ASSURES>

    fichier.fla
    puis pour recuper le noeud j'utilise xpath:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    var sessionNumAss:Number  =  4612;
      var chemin = "/ASSURES/assure[@police="+sessionNumAss+"]";
      //trace(chemin)
      var Noeud= mx.xpath.XPathAPI.selectNodeList(this.firstChild,chemin);
      trace(Noeud) // me renvoit bien tout les elèments du noeud pointé
     //mais j'arrive pas a isoler la valeur du nom

  4. #4
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Je sais pas si tu veux récupérer toute la fiche de ton assuré ... ou juste les noms .. si tu veux juste récupérer les noms pour un numéro de police donné :
    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
     
    var sXML:String = "<items>" ;
    sXML += '<assure police="4612">' ;
    sXML += '<nom>DURANT</nom>' ;
    sXML += '<prenom>MICHEL</prenom>' ;
    sXML += '</assure>' ;
    sXML += '<assure police="4613">' ;
    sXML += '<nom>DUPONT</nom>' ;
    sXML += '<prenom>GERALD</prenom>' ;
    sXML += '</assure>' ;
    sXML += '<assure police="4612">' ;
    sXML += '<nom>JEAN</nom>' ;
    sXML += '<prenom>ALFRED</prenom>' ;
    sXML += '</assure>' ;
    sXML += '</items>' ;
     
    import mx.xpath.XPathAPI ;
     
    var x:XML = new XML(sXML) ;
     
    var police:Number = 4612 ;
    var path:String = "/items/assure[@police=" + police  + "]/nom" ;
     
    var node:Array = XPathAPI.selectNodeList(x.firstChild, path) ;
     
    var len:Number = node.length ; // taille du tableau
    for (var i:Number = 0 ; i<len ; i++) {
    	trace (i + " : " + node[i].firstChild.nodeValue)
    }
    J'ai fait un test directement dans flash sans fichier externe
    Tu vois que j'ajoute au chemin de recherche dans le XPATH "/nom" pour chercher tous les sous noeuds <nom> des noeuds <assure> qui ont pour attribut "police" la valeur que je souhaite.

    EKA+

  5. #5
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Merci EKA
    en effet je cherche a récupérer toute la fiche de l'assuré, police étant un id unique, je me demande si plutôt que d'utiliser xpath et donc de decliner tout les sous noeuds
    var1 =...../nom
    var2 =.../prenom
    même en utilisant un tableau pour faire varier la requete en fonction des sous noeuds enfants, je ne ferai pas mieux de boucler sur mon ficher.xml, et d'injecter dans un tableau les données à l'issue d'un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    if( cur.attributes.police=4612){
                var item = { 
                NOM : subNode[0].firstChild.nodeValue ,
                PRENOM : subNode[1].firstChild.nodeValue 
    		} 
            data.push(item)}
    ...
    Xpath reste-il la meilleure solution?

  6. #6
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Pour récupérer la fiche complète avec le XPath tu réécris le path que tu avais au départ et tu écris :
    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
     
    var sXML:String = "<items>" ;
    sXML += '<assure police="4612">' ;
    sXML += '<nom>DURANT</nom>' ;
    sXML += '<prenom>MICHEL</prenom>' ;
    sXML += '</assure>' ;
    sXML += '<assure police="4613">' ;
    sXML += '<nom>DUPONT</nom>' ;
    sXML += '<prenom>GERALD</prenom>' ;
    sXML += '</assure>' ;
    sXML += '<assure police="4612">' ;
    sXML += '<nom>JEAN</nom>' ;
    sXML += '<prenom>ALFRED</prenom>' ;
    sXML += '</assure>' ;
    sXML += '</items>' ;
     
    import mx.xpath.XPathAPI ;
     
    var x:XML = new XML(sXML) ;
     
    var police:Number = 4612 ;
    var path:String = "/items/assure[@police=" + police  + "]" ;
     
    var node:Array = XPathAPI.selectNodeList(x.firstChild, path) ;
     
    var list = [] ;
     
    _global.Client = function (name, prenom) {
    	this.name = name ;
    	this.prenom = prenom ;
    }
     
    Client.prototype.toString = function () {
    	return "<Client : " + (this.nom || "empty") + " " + (this.prenom || "empty") + ">" ;
    }
     
    var len:Number = node.length ; // taille du tableau
    for (var i:Number = 0 ; i<len ; i++) {
    	var currentItems = node[i].childNodes ;
    	var size = currentItems.length ;
    	var client = new Client() ;
    	for (var j:Number = 0 ; j<size ; j++) {
    		var prop = currentItems[j].nodeName ;
    		var value = currentItems[j].firstChild.nodeValue ;
    		client[prop] =  value ;
    	}
    	list.push( client) ;
    }
     
    trace (list) ;
    honnètement ... moi j'utilise pas XPATH... xpath c'est pratique pour faire des recherches comme tu as pu le voir (par exemple par numéro d'id... mais bon Faut voir d'où viennent tes données au début... si tu as juste un xml au départ c'est clair que c'est pratique.. sinon si tu es sur un serveur PHP par exemple vaut mieux utiliser AMFPHP et MYSQL

    EKA+

  7. #7
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Merci EKA, tu es vraiement un maître.

    J'ai juste modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var currentItems = node[0].childNodes ; 
     
    pas besoin de boucle for (var i:Number = 0 ; i<len ; i++) {
     car le len renvoi 1
    Merci encore

  8. #8
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Si cela renvoi toujours qu'un seul élément pourquoi pas, a toi de comprendre en fonction de tes besoins le code au dessus et d'en faire ensuite ce que tu veux

    EKA+

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

Discussions similaires

  1. [Flex4] mx.xpath.XPathAPI n'existe plus en AS3 ?
    Par Raphael94 dans le forum Flex
    Réponses: 4
    Dernier message: 01/03/2011, 13h55
  2. FLASH et XPATH pb de Qualité ?
    Par pcouas dans le forum Flash
    Réponses: 0
    Dernier message: 29/07/2010, 09h22
  3. Réponses: 2
    Dernier message: 31/08/2006, 14h03
  4. [FLASH MX2004] XPath
    Par Laure888 dans le forum Flash
    Réponses: 11
    Dernier message: 17/10/2005, 18h13
  5. [FLASH MX2004] XPATH
    Par bolo dans le forum Flash
    Réponses: 3
    Dernier message: 24/04/2005, 21h43

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