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 :

Parser un XML avec des références [Flex4]


Sujet :

Flex

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Parser un XML avec des références
    Bonjour à tous,

    Dans le cadre d'un projet flex, je fais appel à un webservice, qui me renvoie un fichier XML, que je passe en dataProvider à une dataGrid.

    Jusquici pas de problème, sauf que mon XML me revoie parfois des références lorsqu'un noeud apparaît plusieurs fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Parametre>
        <id>001</id>
        <libelle>test</libelle>
    </Parametre>
    ....
    <Parametre reference="../../storedSnapshot/Parametre[1]"/>
    La cellule du tableau qui devrait contenir une deuxieme fois le même paramètre est vide.

    Comment faire ?
    - Soit il faut que je trouve comment remplacer toutes les références par le noeud complet comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Parametre>
        <id>001</id>
        <libelle>test</libelle>
    </Parametre>
    ....
    <Parametre>
        <id>001</id>
        <libelle>test</libelle>
    </Parametre>
    - Soit il faut que je trouve comment forcer le datagrid à aller chercher le bon noeud d'après la référence...

    Merci d'avance !

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Salut,
    je pense que tu viens d'énoncer les 2 solutions
    le plus simple serait de retransformer le XML à mon avis. Sinon tu vas devoir parser ton XML côté Flex, tu risques de rajouter pas mal de code si à chaque fois tes noeuds sont de type différent. En terme de clarté et de complexité, il me semble que la première solution est la meilleure.

    Mais tout dépend finalement de comment tu as codé ton Flex jusqu'ici, est-ce que tu accèdes aisément à n'importe quel objet que tu viens de remplir à partir de ton XML ?
    N'oubliez pas avant de poster :

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Je me demandais si il existant une libraire qui ferait la 1ère solution toute seule....

    Pour l'instant j'y accède très simplement:

    Je récupère le XML et je le passe en dataProvider de la grid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var x:XML = new XML(event.result as XML);
    var listeObjets:XMLListCollection = new XMLListCollection(XMLList(x.contenu.Objet));
    dataGrid.dataProvider = listeObjets;
    La grid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <s:DataGrid id="dataGrid" requestedRowCount="1">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="categorie.libelle" headerText="catégorie de l'objet"></s:GridColumn>
    ...

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    A ma connaissance il ne me semble pas. (quelqu'un d'autre?)
    Mais compte tenu de ton code, je plussoie que la première solution est la plus simple
    N'oubliez pas avant de poster :

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Ok, en gros j'insère du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var x:XML = new XML(event.result as XML);
    var listeObjets:XMLListCollection = new XMLListCollection(XMLList(x.contenu.Objet));
     
    //Nouveau Code
    foreach(objet in listeObjets){
        //je teste si le noeud est une référence
        if(objet.parametre.reference != undefined){
            // Si oui, alors je remplace par la valeur du noeud qu'il reference
            objet.parametre = autreobjet.parametre[nombre];
        }
     
    dataGrid.dataProvider = listeObjets;
    C'est ce que je redoutais ....

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    D'où est-ce que tu récupères le XML ? La transformation ne peut pas se faire avant ?
    N'oubliez pas avant de poster :

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Le XML est récupéré par un GET sur un service web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <fx:Declarations>
        <s:HTTPService id="service" method="GET" url="{application.url_BO + '/objets.do'}" result="service_resultHandler(event)" resultFormat="e4x" />	
    ...	
    </fx:Declarations>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function service_resultHandler(event:ResultEvent):void			{
    var x:XML = new XML(event.result as XML);
    var listeObjets:XMLListCollection = new XMLListCollection(XMLList(x.contenu.Objet));
    dataGrid.dataProvider = listeObjets;
    ....

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Oui enfin ce que je voulais dire c'était : est-ce que justement la transformation ne peut pas se faire avant, sous-entendu le service peut-il te renvoyer un fichier XML formatté comme tu le désires ?
    N'oubliez pas avant de poster :

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Comme je n'ai pas d'autres choix, je suis en train de négocier avec la personne en charge du Service Web

    Merci encore Krazymins !

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Ca serait pour toi la solution la plus simple à priori (ainsi que la plus propre vu d'ici). Mais l'autre solution n'est pas à écarter si la négociation n'aboutit pas
    N'oubliez pas avant de poster :

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    j'ai résolu mon problème en ActionScript !

    La référence était de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Parametre reference="../../objet[1]/libelle"/>
    j'ai fait en AS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var numero_incident_ref:int = parseInt(node.libelle.@reference.toString().substr(15).replace("]/libelle",""));
    //J'obtiens la position de l'objet référencé dans le xml
    node2 = listeIncident.getItemAt(numero_incident_ref-1) as XML;
    node.@custom_libelle = node2.libelle;

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

Discussions similaires

  1. [XML] Parser un XML avec des namespaces
    Par Eljildius dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/02/2015, 20h04
  2. API Java pour parser un XML avec des balises avec nom de package
    Par rebelle49 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/08/2014, 13h22
  3. Parser un fichier xml avec des tag names contenant ":" !
    Par sofien dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/11/2010, 10h40
  4. parser du xml avec des methodes compatibles php4/php5
    Par chezdevelopping dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/12/2009, 15h44
  5. [CXF et JAXB] Parser un fichier XML avec des namespaces
    Par cowa dans le forum Services Web
    Réponses: 0
    Dernier message: 26/02/2009, 14h30

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