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 :

[Conseil][Amélioration]Parser un Document (JDOM) avec SAX


Sujet :

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

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut [Conseil][Amélioration]Parser un Document (JDOM) avec SAX
    Bonjour.

    J'ai un parser SAX dans un logiciel, que je viens de coupler avec un autre logiciel. (Histoire complète de cet accouplement ici.)
    Mon parser SAX prenait en paramètre un String (représentation de mon XML) et faisait ensuite son petit travail.
    Aujourd'hui, depuis le nouveau logiciel que je lui ai rattaché, je lui envoie non plus un String à parsé, mais un Document (issu de JDOM...).
    J'ai un peu de mal à trouver une méthode dans SAX qui prenne comme paramètre un Document pour le parser...

    Voici le code que j'utilise actuellement :
    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
    public void readXML(Document doc) throws ProtocolException, IOException {
    		inTree = false;
    		inDeclarations = false;
     
    		try {
    			SAXParserFactory p = SAXParserFactory.newInstance();
    			p.setValidating(false);
    			SAXParser parser = p.newSAXParser();
    			XMLReader reader = parser.getXMLReader();
    			reader.setContentHandler(this);
     
    			XMLOutputter xmlOut=new XMLOutputter();
    			ByteArrayInputStream xmlByteArrayInputStream = new ByteArrayInputStream(xmlOut.outputString(doc).getBytes("UTF-8"));
    			InputSource xmlInputSource = new InputSource(xmlByteArrayInputStream);
     
    			reader.parse(xmlInputSource); // here the stream is parsed.
    Je trouve un petit peu dommage de passer par la version String du Document avant de le lancer au parser.
    Pourriez vous m'aider à améliorer ça ?

    Par avance, Merci
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 106
    Points : 130
    Points
    130
    Par défaut
    Salut, je te fais une reponse en considérant que ton Document en paramètre existe sur un fichier...Si ce n'est pas le cas, tu peux m'envoyer des tomates et ignorer mon post

    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
     
     
    public void readXML(Document doc) throws ProtocolException, IOException { 
          inTree = false; 
          inDeclarations = false; 
          String uri = doc.getDocumentURI();
          URI path = new URI(uri);
          File doc_file = new File(path);
          try { 
             SAXParserFactory p = SAXParserFactory.newInstance(); 
             HandlerBase hd = new HandlerBase;
             p.setValidating(false); 
             SAXParser parser = p.newSAXParser(); 
             reader.parse(doc_file,hd);
               }
     
    }
    PHP / J2EE

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par alheim
    tu peux m'envoyer des tomates
    Bon ben splash alors !
    Mon document est créé à la volée dans une classe puis sans jamais être écrit dans un fichier, il va se faire parser !

    PS : Je ne peux pas écrire ce document dans un fichier, car il est possible qu'il n'y ai pas la place sur le poste client...
    PS2 : Merci quand même
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 106
    Points : 130
    Points
    130
    Par défaut
    juste une question...

    Pourquoi veux tu parser le Document puisque l'interface org.w3c.dom.Document contient deja toutes les méthodes te permettant de naviguer dans ton document XML, de créer des noeuds et des attributs etc etc...

    En fait tu veux parser un truc déja parser

    http://java.sun.com/j2se/1.5.0/docs/api/index.html?javax/swing/plaf/synth/package-summary.html
    PHP / J2EE

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Pour ton cas, il faut créer une classe implémentant l'interface XMLReader.

    La responsabilité de cette classe (JDOMDoc2SAX) est de lire ton document (JDOM) et de créer les événements SAX correspondants.

    Probablement tu vas trouver des exemples sur la toile.

    Le but de XMLReader est de lire qu'importe quel document et de le transformer en événement SAX.

    Il existe des XMLReaders qui lisent des fichiers CSV.
    Bien le bonjour chez vous
    Jowo

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    lien vers ONJava
    Bien le bonjour chez vous
    Jowo

  7. #7
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par alheim
    Pourquoi veux tu parser le Document puisque l'interface org.w3c.dom.Document contient deja toutes les méthodes te permettant de naviguer dans ton document XML, de créer des noeuds et des attributs etc etc...
    Pour ne pas tout re-coder.

    J'ai aujourd'hui un logiciel qui marche, et qui parse des fichiers XML avec SAX.
    Il peut aussi recevoir des String, contenant du XML, et les parser avec le même parser (c'est le code que je vous ai envoyé);
    Enfin, dernièrement, je lui ai rajouté la possibilité de recevoir, non pus des fichiers ou des String, mais des Document.

    Le truc, c'est que pour travailler ave ce Document, j'ai besoin de 3 lignes de code : c'est loin d'être mortel !
    Le problème, dans ces 3 lignes de code, je transforme mon Document XML en String. Et je trouve ça dommage vu que, comme tu dis, j'ai déjà tout dans Document, au niveau XML.

    Maintenant, avec vos réponses, et donc le recul, je me demande si je vais avoir un quelconque intérêt à définir une nouvelle classe, et donc me palucher bien plus que 3 lignes de code, pour éviter de passer par une étape String entre mon Document et mon parser SAX.

    Les 2 approches d'XML (SAX et DOM) étant très différentes, je suis en train de me dire que non seulement ça va me faire beaucoup plus de code, mais en plus, je ne suis pas sûr du tout d'y gagner en performance.

    Je vous laisse me contredire ou argumenter mon point de vue, afin de me convaincre si oui ou non je devrais implémenter XMLReader.

    Quoi qu'il en soit, Merci beaucoup pour vos réponses, votre aide et votre temps
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Avec l'approche décrite dans l'article de ONJava, tu fais la transformation en 3 lignes sans passer par un string.
    Bien le bonjour chez vous
    Jowo

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 106
    Points : 130
    Points
    130
    Par défaut
    il est tot....je dois etre un peu con ce matin......

    Pourquoi vouloir parser un Document ?

    L'utilité du parseur me semble t-il est de pouvoir naviguer sur la structure , non ?

    Cette structure étant deja accessible depuis Document, que va t'offrir de plus le parseur SAX ?

    Merci de m'éclairer.
    PHP / J2EE

  10. #10
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par alheim
    il est tot....je dois etre un peu con ce matin......

    Pourquoi vouloir parser un Document ?

    L'utilité du parseur me semble t-il est de pouvoir naviguer sur la structure , non ?

    Cette structure étant deja accessible depuis Document, que va t'offrir de plus le parseur SAX ?

    Merci de m'éclairer.
    Je pense qu'il souhaite utiliser une partie d'application déjà écrite (avec methodes sur certaines données, etc...) et que cette appli utilise un parser SAX pour lire les données XML. Il l'a expliqué dans son premier post.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  11. #11
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par Regis.C
    Je pense qu'il souhaite utiliser une partie d'application déjà écrite (avec methodes sur certaines données, etc...) et que cette appli utilise un parser SAX pour lire les données XML. Il l'a expliqué dans son premier post.
    C'est exactement ça !
    Marrant, entre valentinois on se comprend.

    Citation Envoyé par jowo
    Avec l'approche décrite dans l'article de ONJava, tu fais la transformation en 3 lignes sans passer par un string.
    Hum.... j'ai pas dû tout lire alors !
    Je me replonge dedans, et je vous tiens au courant.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  12. #12
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Alors je me lève et je confirme ! et si je reste assis, vous ne le verrez pas...
    On peut bien passer de JDOM à SAX en trois lignes : celles données dans l'article ONJava.

    Il n'y a qu'une seule contrainte (que je ne respecte pas dans mon code...) qui est d'avoir défini le fomat SAX dans une implémentation de l'interface
    javax.xml.transform.Templates.
    Or, le parser que j'utilise se contente d'utiliser les méthodes de ContentHandler.

    Bref, je ne vais pas l'utiliser pour ce coup, mais quoi qu'il en soit, je dois vous dire un grand merci pour vos conseils/suggestions, et votre temps.
    D'autant plus que je dois bientôt définir mon propre parser pour une autre partie du logiciel et que ça risque de m'être utile (si je n'utilise pas que JDOM).
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

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

Discussions similaires

  1. comment parser un document xml avec gwt?
    Par zemzoum89 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 01/12/2010, 15h05
  2. [SAX] Parser un document avec SAX et récupérer les données
    Par sperca dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 06/12/2009, 14h51
  3. [SAX] parser un document xml
    Par skyangel dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 11/12/2007, 19h18
  4. [DOM4J] Parser un document XML avec DOM
    Par kroax dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 23/11/2007, 01h48
  5. [JDOM] [JDom] Inclure le document XSL avec JDom
    Par picomz dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/07/2006, 16h18

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