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 String XML à partir d'un noeud [SAX]


Sujet :

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

  1. #1
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut Récupérer String XML à partir d'un noeud
    Salut,

    Je souhaitais savoir s'il y a moyen avec SAX de récupérer sous forme de String le contenu XML qui se trouve au niveau d'un noeud.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <XML>
      <HEADER>
      </HEADER>
      <BODY>
        <ATT>attribut</ATT>
        <STRUC>structure</STRUC>
      </BODY>
    </XML>
    Par exemple récupérer le contenu de <BODY> sous forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "<ATT>attribut</ATT><STRUC>structure</STRUC>"
    Merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut
    Par transformation XSLT.


    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
     
    String _xmlDocument = 	"<XML>  <HEADER>  </HEADER>  <BODY>  "
       + "  <ATT>attribut</ATT>    <STRUC>structure</STRUC>  "
       +"</BODY></XML>";
    String _xslDocument =   "<?xml version=\"1.0\" ?>"
      + "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"
      + "       <xsl:template match=\"//BODY/*\">"
      + "   <xsl:copy-of select=\".\" />"
      + "   </xsl:template>"
      + "</xsl:stylesheet>"; 
     
    TransformerFactory fabrique;
    StreamSource xml;
    StreamSource xslt;
    StreamResult dest;
    Transformer transformation;
     
    fabrique = TransformerFactory.newInstance();
    xml = new StreamSource(new StringReader(_xmlDocument));
    xslt = new StreamSource(new StringReader(_xslDocument));
    transformation = fabrique.newTransformer(xslt);
    dest = new StreamResult(System.out);
    transformation.transform(xml, dest);

    xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" ?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">"
      <xsl:template match="//BODY/*">
            <xsl:copy-of select="." />
      </xsl:template>
    </xsl:stylesheet>

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Mouais, je pense qu'avec SAX, ce sera du bidouillage, en tous les cas avec l'api Java. L'analyse du document est totalement encapsulée donc tu ne peux pas demander au parser d'ignorer certains noeuds.

    Le seul moyen que je verrais, si l'utilisation de SAX est vraiment une condition absolue, serait de définir ton propre DefaultHandler et de stocker dans une FIFO les évènements SAX à ignorer, puis de vider la file lorsque le tag de fermeture est atteint pour générer un évènement. Ce bidouillage nécessite de définir de nouvelles méthodes qui devront seules êtres redéfinies pour parser le document. Pour éviter toute mauvaise manip, les méthodes redéfinies dans ton DefaultHandler devront absolument être final.

    Ca donnerait un truc du genre
    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
     
    public class BidouilleHandler extends DefaultHandler {
         private FIFO<Content> file;
     
         private class Content {
              String s; int start, length;
         }
     
         @Override
         public final void characters(char[] ch, int start, int length) {
              //voir startElement()
         }
     
         @Override
         public final void endElement(String uri, String localName, String qName) {
              //voir startElement()
         }
     
         @Override
         public final void startElement(String uri, String localName, String qName, Attributes attributes) {
              //tester si l'élément doit être ignorer, si oui, l'ajouter à la file,
              //sinon appeler startElement2();
         }
     
         public final void endElement2(String uri, String localName, String qName) {
         }
     
         public void startElement2(String uri, String localName, String qName, Attributes attributes) {
         }
     
         public void characters2(char[] ch, int start, int length) {
         }
    }

  4. #4
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    J'avais utilisé un simple travail sur la string de départ. Je vais voir si XSLT permet de gagner du temps de traitement, sinon je garde ma solution.

    Merci pour vos réponses

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

Discussions similaires

  1. [JDOM] Récupération code XML à partir d'un noeud
    Par donatienmnz dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/10/2012, 10h53
  2. Réponses: 1
    Dernier message: 08/12/2010, 13h56
  3. Comment récupérer les xml à partir d'une référence web
    Par kokokaka dans le forum Services Web
    Réponses: 3
    Dernier message: 03/09/2009, 17h17

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