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

Flex Discussion :

Atteindre les attributes d'un XML


Sujet :

Flex

  1. #1
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut Atteindre les attributes d'un XML
    Bonjour à tous,

    Je me demandais s'il était possible de stocker dans un ArrayCollection, à la fois à la fois la valeur d'un noeud mais aussi la valeur de son attribut ?
    Exemple d'XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Resultats>
        <CodeTarif ID="1">TARIF CANADA</CodeTarif> 
        <CodeTarif ID="2">TARIF ETATS_UNIS</CodeTarif> 
    </Resultats>
    Pour l'instant lorsque je veux récupérer toutes les valeurs je m'y prend comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var provider:ArrayCollection = event.result.Resultats.CodeTarif;
    Donc pour résumer, ce que je voudrais au final, c'est un ArrayCollection avec deux colonnes, une pour ID et l'autre pour le CodeTarif.

    J'ai vu qu'il existait pas mal d'objets XML différents, si quelqu'un pouvait me donner une piste pour mes recherches, je l'en remercie d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    Je ferais peut-être ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var xml:XML = new XML( event.target.data );
    var provider:ArrayCollection = new ArrayCollection();
     
    var codeTarifs:XMLList = xml.CodeTarif;
    for each(var codeTarif:XML in codeTarifs){
     var o:Object = new Object();
     o.id = codeTarif.@ID;
     o.codetarif = codeTarif;					 
     provider.addItem(o);
    }

  3. #3
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Merci beaucoup pour ta réponse,

    Je rencontre un petit souci avec "event.target.data". Il me génère une erreur (laquelle je ne sais pas parce que mon débugeur ne réagit plus depuis quelques temps mais ça c'est une autre histoire ).
    Alors je l'ai remplacé par un event.result dont j'ai mis ce que donne l'alerte en pièces jointes.

    En faisant cela, il n'y a plus d'erreur mais par contre rien ne s'affiche dans ma combobox (bien que j'ai mis le labelField="id").

    Une idée ?
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    tu utilises un URLLoader pour charger ton fichier XML ?

  5. #5
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,
    as-tu vérifié que ton ArrayCollection est bien rempi ?

  6. #6
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Non un httpService sur un WebService qui me retourne un XML

    EDIT : et pour l'ArrayCollection, il n'est pas rempli parce que on n'entre jamais dans la boucle.
    (J'ai mis la pièce jointe plus haut)

  7. #7
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Citation Envoyé par ToniConti Voir le message
    EDIT : et pour l'ArrayCollection, il n'est pas rempli parce que on n'entre jamais dans la boucle.
    Au moins tu sais pourquoi ta ComboBox est vide

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    comme c'est un Webservice qui te retourne un resultat, la syntaxe est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var xml:XML = event.result as XML;
    là je t'ai donné toutes les réponses

  9. #9
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Oui d'ailleurs je t'en remercie

    Mais là je suis en train de consulter la doc : http://livedocs.adobe.com/flex/3/htm..._access_6.html

    Et il s'avère que pour le XML suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <Description>
            <value>xxx</value>
        </Description>
    </RDF>
    Il suffirait de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var attributes:XMLList = XML(event.result).Description.value;
    Malheureusement mon XML étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ListeCodeTarif> 
     
    	<CodeTarif ID="TCA">TARIF CANADA</CodeTarif> 
     
    	<CodeTarif ID="TUS">TARIF ETATS_UNIS</CodeTarif> 
     
    	<CodeTarif ID="TEB">TARIF EURO BELGIQUE</CodeTarif> 
     
    </ListeCodeTarif>
    Si j'utilise ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var codeTarifs:XMLList = XML(event.result).ListeCodeTarif.CodeTarif;
    voire même
    var codeTarifs:XMLList = XML(event.result).ListeCodeTarif;
    La variable codeTarifs est vide et donc je ne rentre jamais dans la boucle...
    Ce qui fait que je suis coincé...

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    je pense que tu n'as pas bien compris le fonctionnement du XML avec AS3.
    Si tu changes uniquement la première ligne de code qui récupère ton XML et que tu conserves la suite comme je te l'ai indiqué, ça doit fonctionner !

  11. #11
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Pour montrer ce que j'ai compris (ou qu'on me montre ce que j'ai pas compris ), voici mon nouveau code avec les modifications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var codeTarifs:XMLList = XML(event.result).ListeCodeTarif.CodeTarif;
    Alert.show("avant boucle");
    for each(var item:XML in codeTarifs)
    {
    	Alert.show("début boucle");
    	var o:Object = new Object();
    	o.id = item.@ID;
    	o.codetarif = item;
    	provider.addItem(o);
    }
    comboCodeTarif.dataProvider = provider;

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var codeTarifs:XMLList = XML(event.result).CodeTarif;

  13. #13
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Non plus...
    Le plus dingue c'est que ceci (et c'est peut-être un indice) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboCodeTarif.dataProvider = event.result.ListeCodeTarif.CodeTarif;
    Fonctionne. Dans ma combobox je retrouve bien tout mes libellés. Le seul inconvénient avec cette méthode c'est que mes ID sont perdus. C'est pourquoi je me casse la tête à essayer d'enregistrer cela dans un ArrayCollection.

    EDIT :
    En fait s'il y a bien quelque chose que je ne comprend pas, c'est comment afficher ne fusse qu'un seul mot du xml chargé ? J'ai essayé pas mal de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Alert.show(xml.toString()); //[object Object]
    Alert.show(xml.toXMLString()); //[object Object]
    Alert.show(xml[0].toString()); //[object Object]
    Alert.show(xml[0].toXMLString()); //[object Object]
    Alert.show(xml.children().toXMLString()); //""
    Alert.show(xml.children().toString()); //""
    Alert.show(xml.children()[0].toString()); //debug plante
    Alert.show(xml.children()[0].toXMLString()); //debug plante
    Mais pas moyen d'afficher la moindre chose.

  14. #14
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Bon apparemment le problème vient de la lecture du XML.
    Puisque avec ceci tout fonctionne :
    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
    private function codeTarif(event:ResultEvent):void
    {
    	var provider:ArrayCollection = new ArrayCollection();
    	var xml:XML = 
    		<ListeCodeTarif>
    			<CodeTarif ID="TCA">TARIF CANADA</CodeTarif>
    			<CodeTarif ID="TUS">TARIF ETATS_UNIS</CodeTarif>
    			<CodeTarif ID="TEB">TARIF EURO BELGIQUE</CodeTarif>
    			<CodeTarif ID="TEF">TARIF EURO FRANCE</CodeTarif>
    			<CodeTarif ID="TEH">TARIF EURO HOLLANDE</CodeTarif>
    			<CodeTarif ID="TEX">TARIF EXPORT</CodeTarif>
    			<CodeTarif ID="TUK">TARIF GRANDE BRETAGNE</CodeTarif>
    			<CodeTarif ID="TCH">TARIF SUISSE</CodeTarif>
    		</ListeCodeTarif>
    	var codeTarifs:XMLList = xml.CodeTarif;
    	for each(var item:XML in codeTarifs)
    	{
    		var o:Object = new Object();
    		o.id = item.@ID;
    		o.codetarif = item;
    		provider.addItem(o);
    	}
    	comboCodeTarif.dataProvider = provider;
    }
    EDIT :
    J'ai du neuf :
    var temp = event.result;
    Alert.show(temp.toString); //function Function() {}

  15. #15
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Citation Envoyé par ToniConti Voir le message
    Le seul inconvénient avec cette méthode c'est que mes ID sont perdus.
    Tes id sont perdu en faisant comme ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboCodeTarif.dataProvider = event.result.ListeCodeTarif.CodeTarif(@ID);

  16. #16
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Une erreur est levée : Accès non défini à la propriété ID

  17. #17
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Résolu.
    Ce qu'il manquait est en gras ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <mx:HTTPService url="http://localhost/GestTarif/ListeCodeTarif.csp"
    	result="codeTarif(event)" fault="mssqlFault(event)" resultFormat="e4x"/>
    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
     
    private function codeTarif(event:ResultEvent):void
    {
    	var provider:ArrayCollection = new ArrayCollection();
     
    	for each(var item:XML in XML(event.result).CodeTarif)
    	{
    		var o:Object = new Object();
    		o.id = item.@ID;
    		o.lib = item;
    		provider.addItem(o);
    	}
    	comboCodeTarif.dataProvider = provider;
    	ListeConditionTarifaire.send();
    }
    C'est pourtant les bases et je suis passé à côté.

  18. #18
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Lol c'est vrai que c'est dommage, on est tous passé à côté lol.
    Au moins c'est résolu maintenant

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/08/2010, 15h32
  2. [DOM] Entités dans les attributs d'un XML généré par DOM
    Par angelinemm dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 09h26
  3. Réponses: 1
    Dernier message: 01/07/2006, 11h18
  4. Réponses: 2
    Dernier message: 14/06/2006, 10h34
  5. Réponses: 3
    Dernier message: 01/04/2005, 09h37

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