Posez votre question Signaler

[Java][Sax][xml] exemples

Pitu 1398Messages postés 3 octobre 2002Date d'inscription 4 avril 2012Dernière intervention - Dernière réponse le 3 avril 2008 à 14:40
Bonjour à toutes et à tous.

Cela va surprendre ceux qui m'ont suivi au cours de mes posts sur ce forum, mais oui, je m'interresse également aux nouvelles techno !

Postulat de base : je débute totalement en java.

But : Extraire des morceaux d'un fichier xml pour créer plusieurs fichiers.

Exemple :
<Debut>
<nom>Fic1</nom>
<rep>/repA</rep>
<contenu> ... </contenu>
<nom>Fic2</nom>
<rep>/repB</rep>
<contenu> ... </contenu>
<nom>Fic3</nom>
<rep>/repC</rep>
<contenu> ... </contenu>
...
</debut>

=> je voudrais créer 3 fichiers nommés Fic1, Fic2 et Fic3, chacun contenant le contenu de sa balise <contenu> (Ouf !), et chacun situé dans le répertoire /repA, /repB ou repC ...

Je ne vous demande évidemment pas de me macher le travail, mais après avoir cherché un peu dans mes docs, je m'oriente vers l'utilisation du parser Sax.
Et si l'un ou l'une d'entre vous avait un lien vers un exemple d'utilisation, ça me rendrait rudemment service.
Je suis preneur de toute documentation pouvant m'aider (ormis celles de ce site que j'ai déjà commencé à explorer).

Rappel : je débute complètement en java (mais je l'ai déjà précisé, il me semble).

D'avance merci ...

 
   (:•Þ  Pitu
Lire la suite 

[Java][Sax][xml] exemples »

15 réponses
Réponse
+5
moins plus
Voici une classe implémentant SAX :

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;


public class A2DefaultHandler extends DefaultHandler{
//------------------------------------------------------------------------------------------------------------
public void parse(String fullFileName){
SAXParser parser;
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
parser = factory.newSAXParser();
parser.parse(new File(fullFileName), this);
} catch (SAXException se) {
// handle error
} catch (IOException ioe) {
// handle error
} catch (ParserConfigurationException pce) {
// handle error
}
}
//------------------------------------------------------------------------------------------------------------
public void setDocumentLocator(Locator locator){}
//------------------------------------------------------------------------------------------------------------
public void startDocument() throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void endDocument() throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void processingInstruction(String target, String data){}
//------------------------------------------------------------------------------------------------------------
public void startPrefixMapping(String prefix, String uri){}
//------------------------------------------------------------------------------------------------------------
public void endPrefixMapping(String prefix){}
//------------------------------------------------------------------------------------------------------------
public void startElement(String namespaceURI, String localName, String raxName, Attributes atts) throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void endElement(String namespaceURI, String localName, String rawName) throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void characters(char[] ch, int start, int length) throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException{}
//------------------------------------------------------------------------------------------------------------
public void skippedEntity(String name)throws SAXException{}
}



Cette classe est vide, c'est le strict minimum pour faire du SAX. Sache que toutes les méthodes qui sont présentes sont obligatoires (sauf peut être la première mais c'est la plus importante...) même si tu les laisse vide.

A toi maintenant de remplir selon tes besoins !
daddou20000010- 3 avril 2008 à 14:40
bonjour
j'ai un fichier XMI je ne sais comment utiliser SAX
merci
Ajouter un commentaire
Réponse
+2
moins plus
La première méthode sers à lancer le processus. Ensuite, le parser analyse séquentiellement le fichier (c'est à dire que si tu veux revenir en arrière, tu dois recommencer du début - enfin si tu fait du cobol, tu doit le savoir mieux que moi)

Le reste n'est qu'un gestionnaire d'évènement :

La méthode startElement est éxécutée à chaque fois que le parser rencontre une balise XML ouvrante.

Les attributs des méthodes te donnent des infos sur le document (nom de la balise, texte contenu...Etc...)

Si tu a des questions précises, n'hésites pas !

Jibé.
Ajouter un commentaire
Réponse
+1
moins plus
Ca mérite bien un ...

#           #   #######     ######     #####    ###           ##
# #     ##   #                   #           #  #          #     #             ##
#   # #  #   #                   #           #  #                 #             ##
#     #   #   #####          ######   #                 #              #
#          #   #                   #       #      #                 #
#          #   #                   #        #     #          #    #              ##
#          #   ##### ##    #          #    #####    ###           ##


 
   (:•Þ  Pitu
Ajouter un commentaire
Réponse
+1
moins plus
Merci également, Peppena.
Mais je pense que mon besoin nécessite plus un parseur comme Sax que Dom : J'ai juste besoin de parcourir séquentiellement mon fichier, et non d'accéder à une feuille directement par son path.
Maintenant, je peux me tromper ...
Continuez à m'envoyer tout ce qui peut être susceptible de m'aider.
Je regarderai ça lundi au boulot.

Et encore merci.
 
   (:•Þ  Pitu
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,
c'est un vrai plaisir de vous trouver : moi aussi je commence la programmation JAVA. J'ai aussi la documentation de ce site mais je n'ai pas le temps pour parcourir tous les articles. Si vous pouvez me donner une certaine reference ... je vous ecoute. Ou bien me dire qqch sur ce que vous avez deja fait dans ce domaine. Ces nouvelles technologies sont tres interessantes je trouve.
A bientot.
Cristi
Ajouter un commentaire
Réponse
+0
moins plus
Salut !

C'est une bonne chose de s'intéresser aux nvelles technos :)

Vas à cette adresse : http://www.application-servers.com/

Tu pourras y télécharger le "livre blanc XML" qui répondras à tes questions sur XML (il contient notamment des exemples de code implémentant SAX)

J'espère que tu y trouveras ton bonheur !

Jibé
Ajouter un commentaire
Réponse
+0
moins plus
Ben ... Merci !

J'ai rien compris, mais je suis sûr que ça va m'aider.
Me reste plus qu'à plancher ...

Si t'as d'autres pistes, n'hésite surtout pas.
Sorti du cobol, moi, je nage ... Gloubs !

 
   (:•Þ  Pitu
Ajouter un commentaire
Réponse
+0
moins plus
c'est un parseur Dom
mais ca peut t'aider

http://www.javafr.com/article.aspx?Val=190

cordialement
Ajouter un commentaire
Réponse
+0
moins plus
Pitu --> oui je pense que SAX est préférable à DOM dans ton cas. De plus, tu évites tout problème de mémoire : DOM étant très couteux en mémoire, il ne faut l'utiliser que lorsque c'est inévitable, c'est à dire lorsque l'on veux modifier le document XML (ajouter des noeuds, modifier la structure XML, sauvegarder le document etc.). Si tu manipule un gros fichier XML (de plusieurs Mos), DOM montant tout le fichier en mémoire, tu peux avoir un 'OutOfMemory' pas très joli sur l'écran.

Dans tous les autres cas, il faut préférer SAX. Enfin c'est mon avis et c'est discutable.

Si tu as des questions précises, n'hésites pas.
Ajouter un commentaire
Réponse
+0
moins plus
Moi je prefere XSLTPROC, c'est mon avis et ceci est indiscutable :-DDD
Mais dis moi Pitu tu cherches a ecrire un parser ou un xslt?

.  .
\_/
Pitu- 19 mai 2003 à 10:59
Salut Teebo.

Ben ... ni l'un ni l'autre, en fait.
Pour plus de précisions sur ce que je veux faire, je te renvoie au début de ce post. J'ai essayé d'y expliquer plus ou moins clairement mon but.
Le pb est que je parle couramment le procédural, mais que je comprends pas une bribe d'objet ... ;o)

a+
 
   (:•Þ  Pitu
Ajouter un commentaire
Réponse
+0
moins plus
Teebo --> je n'ai pas dis que je préférais SAX, j'ai dis que c'était préférable de l'utiliser dans ce cas :)

Sinon, je ne connais de XSLT que la transformation d'un document XML en Html (donc pas adapté au pb dont on parle)... je ne sais pas si c'est possible de faire autre chose avec. Je ne connais pas non plus XSLTPROC ni les fonctionnalités qu'il propose... Tu peux nous en parler ?
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour à toutes et à tous ,
J'ai besion de consulter des exemples de parseurs XML ,si vous connaissez des sites de parseurs XML ,merci de me les fournir et
bonne continuation à toutes et à tous .

cedric
Ajouter un commentaire
Réponse
+0
moins plus
bonjour
J’ai exporté un diagramme d’activité en XMI et je veux joindre ce fichier XMI au fichier XMI de diagramme de classe correspondante à l’aide de SAX.
E je ne sais pas comment je peu utiliser SAX
merci
Ajouter un commentaire
Ce document intitulé « [Java][Sax][xml] exemples » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?