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érer l'intégralité du contenu d'une balise


Sujet :

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

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Points : 100
    Points
    100
    Par défaut Récupérer l'intégralité du contenu d'une balise
    Bonjour à tous,

    Via DOM, Je souhaiterais récupérer l'intégralité du contenu d'une balise (pas uniquement le texte), mais malgré mes recherches, je ne trouve pas la solution.

    Pour illustrer mon propos :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <geometrie>
    <a>
    <b>
    <c>
    xxxxx
    </c>
    </b>
    <d>
    <e>
    yyyyyyy
    </e>
    </d>
    </a>
    </geometrie>

    Et je souhaiterais récupérer sous forme de texte
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <a>
    <b>
    <c>
    xxxxx
    </c>
    </b>
    <d>
    <e>
    yyyyyyy
    </e>
    </d>
    </a>

    Pour le moment j'ai récupéré mon Element <geometrie> mais impossible d'aller plus loin.
    Autre chose à savoir, la présence des balises n'est pas garantie : <d> et <e> ne sont pas nécessairement présentes.

    En vous remerciant par avance pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    le DOM fourni avec Java n'est pas super-super pratique. Mais bon on va voir ça.

    Donc, de ce que tu nous en dit, tu as récupéré l'élément <geometrie>, donc tu as quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element geometrie = obtenirGeometrie();
    Maintenant il s'agit d'obtenir <a>.

    les éléments ont une méthode getElementsByTagName() qui... Fait exactement ce qu'elle dit qu'elle fait. On va s'en servir pour récupérer tous les éléments <a> contenus dans <geometrie>. Il n'y en a qu'un seul, donc en fait on va se contententer de récupérer le premier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Element a = (Element)geometrie.getElementsByTagName("a").item(0);
     
    // verifier un peu
    System.out.println(a.getTagName());
    Ok donc on a récupéré notre élément <a>.

    Reste à voir comment retransformer tout ça en texte, avec tout son contenu.

    Avec le DOM fourni avec Java, pour retransformer un Document en fichier XML, on doit passer par la classe Transformer (mais hélas Optimus Prime ne vient jamais nous aider.)
    Eh bien ça marche aussi pour transformer un seul élément en texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(new DOMSource(a), new StreamResult(System.out));
    Faute d'une autre instruction, notre transformer transforme juste du XML d'une source à une destination sans y apporter de modification.
    DOMSource(a) indique que le truc à "transformer" c'est notre élément <a> précédemment récupéré.
    StreamResult(System.out) indique StreamResult donc écrire la source sous forme de XML dans un flux de destination. Et ce flux c'est System.out, c'est à dire la sortie standard.

    On obtient ceci:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?><a>
    <b>
    <c>
    xxxxx
    </c>
    </b>
    <d>
    <e>
    yyyyyyy
    </e>
    </d>
    </a>

    Il y a la déclaration XML <?xml version="1.0" encoding="UTF-8"?>. Cela ne t'arrange peut-être pas.

    Pour s'en débarrasser on va configurer un peu le transformer avant d'appeler transform() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    Et là on obtient exactement ce que tu avais demandé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Points : 100
    Points
    100
    Par défaut
    Je ne pouvais demander mieux
    Un grand merci thelvin

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

Discussions similaires

  1. [SAX] Récupérer le contenu d'une balise imbriquée
    Par chouxe dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 05/01/2007, 13h58
  2. Récupérer le contenu d'une balise en php
    Par Mister Nono dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2006, 19h52
  3. Réponses: 12
    Dernier message: 20/09/2006, 09h31
  4. [Tableaux] Récupérer le contenu d'une balise HTML
    Par StarNab dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2006, 12h38
  5. [DOM] Récupérer le contenu d'une balise donnée
    Par mimi31110 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 26/06/2006, 23h46

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