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

Format d'échange (XML, JSON...) Java Discussion :

Récupération des enfants d'un noeud [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut Récupération des enfants d'un noeud
    Bonjour

    Voici mon problème : je veux écrire une fonction qui doit analyser le fichier XML suivant dont je vous passe un extrait :
    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
     
    <interaction>
               <names>
                 <shortLabel>virf-ask1</shortLabel>
                 <fullName>Yeast 2 hybrid analysis reveals interaction between  the  VirF protein of Agrobacterium tunifaciens and the ASK1 protein</fullName>
               </names>
               <experimentList>
                 <experimentRef ref="EBI-605982"/>
               </experimentList>
               <participantList>
                 <proteinParticipant>
                   <proteinInteractorRef ref="EBI-605118"/>
                   <role>bait</role>
                 </proteinParticipant>
                 <proteinParticipant>
                   <proteinInteractorRef ref="EBI-532357"/>
                   <role>prey</role>
                 </proteinParticipant>
               </participantList>
               <interactionType>
                 <names>
                   <shortLabel>physical interaction</shortLabel>
                   <fullName>physical interaction</fullName>
                 </names>
                 <xref>
                   <primaryRef db="psi-mi" id="MI:0218"/>
                   <secondaryRef db="pubmed" id="14755292"/>
                 </xref>
               </interactionType>
               <confidence unit="UI" value="8"/>
               <xref>
                 <primaryRef db="intact" id="EBI-606054" secondary="virf-ask1"/>
               </xref>
               <attributeList>
                 <attribute name="kd">1.0</attribute>
               </attributeList>
             </interaction>
    Voici ma fonction :
    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
     
    private void makeInteraction(Element current, int depth) {
            Protein P;
            int confidence = 0;
            String identity = "";
            Interaction interaction = new Interaction();
            List children = current.getChildren();
            Iterator i = children.iterator();
            while (i.hasNext()) {
                org.jdom.Element e = (Element) i.next();
                String child = e.getName();
                if (child.compareTo("interaction") == 0) {
                    System.out.println("interaction trouvé");
                    List list = e.getChildren("proteinInteractorRef");
                    Iterator it = list.iterator();
                    while (it.hasNext()) {
                        System.out.println("pir trouvé");
                        org.jdom.Element elm = (Element) it.next();
                        tour++;
                        if (tour % 2 != 0) {
                            identity = elm.getAttributeValue("ref");
                            System.out.println("id = "+identity);
                            if (!depart.contains(identity))
                                depart.add(identity);
                            for (int k = 0; k < proteinList.size(); k++) {
                                P = (Protein) proteinList.get(k);
                                if (P.id.compareTo(identity) == 0) {
                                    place = k;
                                }
                            }
                        } else {
                            identity = e.getAttributeValue("ref");
                        }
                        org.jdom.Element el = e.getChild("confidence");
                        if (el != null) {
                            try {
                                System.out.println("confidence trouvé");
                                confidence = Integer.parseInt(el
                                        .getAttributeValue("value"));
                            } catch (NumberFormatException nfe) {
                            }
                        }
                        interaction.confidence = confidence;
                        interaction.id = identity;
                        P = (Protein)proteinList.get(place);
                        P.interactorList.add(interaction);
                    }
                }
                makeInteraction(e, depth+1);
            }
        }
    Mon souci est qu'elle trouve effectivement le noeud interaction. Mais je veux ensuite pourvoir lister et récupérer des infos de certains enfants de ce noeud. Par exemple, je veux récupérer tous les noeuds proteinInteractorRef. Si j'ai bien compris, je peux utiliser sur le noeud en cours getChildren("proteinInteractorRef"). Seulement, au final, je ne retire rien. pareil pourla détection du noeud confidence.
    Où ai-je fait mon erreur ?
    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Salut,

    j'ai pas lu tout ton code mais si j'ai bien compris ce que tu veux faire, le plus simple est d'utiliser l'API XPath fournie avec JDom.

    Tu pourra récupérer tous tes noeuds interaction dans une liste, puis appliquer à nouveaux des XPath dessus pour récupérer tes noeuds proteinInteractorRef ou confidence en une seule opération.

    Là j'ai pas le code exact en tête mais je pourrai t'en dire plus demain depuis le taf si tu veux.
    A+

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut
    Très volontiers Vignot, très volontiers. Toutefois, j'ai un peu progressé dans ma méthode hier, je vais tenter de l'améliorer encore mais il est clair que mes méthodes auraient besoin d'être plus simplifiées.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Re,

    Je saisi pas tout ce que tu veux faire dans ton code, notemment avec les "tour % 2" mais voila comment utiliser XPath, ce qui devrait te simplifier la tâche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List interactionList = XPath.selectNodes(document, "//interaction");
    Tu obtiens ainsi directement la liste de tous tes noeud "interaction" du document, plus besoin de faire ton "if (e.getName().compareTo("interaction") == 0)" (je pense que ta méthode récursive n'a plus lieu d'être du coup).

    Si tu browse ta liste, tu peux alors utiliser les méthodes getChild() ou getChildren() de chaque élément ou appliquer de nouveau des XPath dessus.

    Bon Jdom
    A+

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut
    Ok, merci Vignot, je jetterais un oeil dessus. As-tu un lien vers la javadoc de XPath ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    J'ai ça dans mes favoris :
    http://www.jdom.org/docs/apidocs/

    JDom a ses propres lib pour XPath donc c'est par là que ça se passe.
    Note que pour utiliser XPath avec Jdom, il faut inclure en plus du jdom.jar :
    -saxpath.jar,
    -jaxen-jdom.jar
    -jaxen-code.jar

    qui se trouve dans jdom-1.X\lib

    A+

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut
    Ok, merci pour ton aide Vignot.
    J'arrangerais mes méthodes ainsi.
    A charge de revanche.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/06/2012, 12h36
  2. Réponses: 1
    Dernier message: 26/11/2008, 03h15
  3. Récupération des attributs d'un noeud
    Par masseur dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 31/03/2008, 17h51
  4. Récupération des noeuds XML :'(
    Par le_chomeur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2008, 18h15
  5. [DOM] savoir si un noeud a des enfants avec hasChildNode
    Par starr dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 24/07/2007, 00h10

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