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 :

Extraction d'un sous document


Sujet :

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

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut Extraction d'un sous document
    Bonjour à tous,

    Voilà j'ai une interrogation sur les documents JDOM. Voici le fonctionnement de mon application à l'heure actuelle.

    Je récupère un flux XML. A partir de ce flux je créer un document JDOM. Le flux XML que je récupère est de la forme:

    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
     
    <response>
           <answer>
                <sousanswer>
                       ....<balise1>
                       ....
                       ....
                </sousanswer>
                <sousanswer>
                       ....<balise1>
                       ....
                       ....
                </sousanswer>
           </answer>
    </response>
    L'élément racine du document est la balise <response>

    Je voudrais extraire de ce document JDOM un sous document (un sous arbre) débutant à la balise <sousanswer>.
    Je ne vois cependant pas comment procéder: j'ai déjà tenté de changer le noeud racine et de générer un nouveau document mais sans succès.

    Je voudrais savoir s'il est possible de faire cela avec les méthodes de mon document JDOM.

    Merci à tous.

  2. #2
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    ben tu prend ta racine : <response>
    tu prend les noeud fils de celle ci , tu auras donc : <answer>
    tu prend les noeuds fils de <answer>, tu auras donc l ensemble de ton sous document ....
    les tutos ou faqs de dev.com explique bien comment parcourir un document .

  3. #3
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    newDocument = new Document(oldDocument.getRootElement().getChild("answer").getChild("sousanswer"));
    Cela ne fonctionne pas ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Bonjour,

    En utilisant la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Document newDocument = new Document(vXmlTree.getRootElement().getChild("answer").getChild("sousanswer"));
    j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    org.jdom.IllegalAddException: The Content already has an existing parent "answer"
    	at org.jdom.ContentList.add(ContentList.java:155)
    	at org.jdom.ContentList.add(ContentList.java:127)
    	at java.util.AbstractList.add(AbstractList.java:88)
    	at org.jdom.Document.setRootElement(Document.java:234)
    	at org.jdom.Document.<init>(Document.java:116)
    	at org.jdom.Document.<init>(Document.java:153)
    	at JDOM.main(JDOM.java:83)
    J'ai en attendant fait une bidouille que je ne trouve pas géniale du tout pour récupérer le contenu dans un autre arbre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      List content = vXmlTree.getRootElement().getChild("answer").cloneContent();
     
      for(int i=0;i<content.size();i++){	
    	Content next = (Content)content.get(i);
    	next.detach();
      }
     
      Document doc2 = new Document();
      doc2.setRootElement(new Element("answer"));
      doc2.getRootElement().setContent(content);
    qui finalement créer un autre arbre avec une nouvelle racine et récupère le contenu de l'ancien arbre.

    Le résultat est celui souhaite mais le fonctionnement me parait peu orthodoxe

  5. #5
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    Effectivement, la réponse que je t'ai donné ne semble pas correcte puisque j'ai eu moi aussi des soucis.

    A présent j'utilise le code suivant, qui en plus ne garde que les noeuds "Element" :
    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
     
    /* Création de la racine */
    root = new Element(oldDocument.getRootElement().getName());
     
    /* Il faut récupérer tous les contenus et non pas uniquement le 1er élément */
    contentList = oldDocument.cloneContent();
    contentList.add((Content)root);
    for (cpt = 0; cpt < contentList.size(); cpt++)
    {
    	try
    	{
    		elm = (Element)contentList.get(cpt);
    		contentList.remove((Content)elm);
    	}
    	catch (ClassCastException e)
    	{
    		// On ne fait rien
    	}
    }
     
    /* Création du Document XML */
    XMLDocument = new Document(contentList);

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Bonsoir à toi et merci pour ta réponse.

    Je ne vois pas cependant en quoi le code donné extrait un sous-arbre issu de mon document initial. J'ai l'impression en fait que tu enlèves tous les éléments jusqu'à obtenir un document quasi vierge.

    En effet, je récupère la réponse ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0" encoding="UTF-8"?>
    <response />
    Merci par avance

Discussions similaires

  1. Enregistrer sous - document.execCommand
    Par skeut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2006, 09h55
  2. fenetre enregistrer sous document word à partir d'excel
    Par Australia dans le forum VBA Word
    Réponses: 8
    Dernier message: 24/10/2006, 17h53
  3. extraction de liste sous Excel
    Par Mario Rousson dans le forum Access
    Réponses: 6
    Dernier message: 06/10/2006, 14h22
  4. [RegEx] extraction d'une sous chaine
    Par zulkifli dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 13h27
  5. [Arbre XMl] Extraction d'un sous arbre
    Par tipaquo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/06/2005, 12h34

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