[Java][Sax][xml] exemples

Pitu Messages postés 1460 Statut Contributeur -  
daddou20000010 Messages postés 9 Statut Membre -
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
A voir également:

13 réponses

Jibé
 
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 !
6
daddou20000010 Messages postés 9 Statut Membre 2
 
bonjour
j'ai un fichier XMI je ne sais comment utiliser SAX
merci
0
Jibé
 
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é.
2
Pitu Messages postés 1460 Statut Contributeur 125
 
Ca mérite bien un ...

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

 
   (:•Þ  Pitu
1
Pitu Messages postés 1460 Statut Contributeur 125
 
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
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cristi
 
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
1
Jibé
 
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é
0
Pitu Messages postés 1460 Statut Contributeur 125
 
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
0
peppena Messages postés 143 Statut Membre 5
 
c'est un parseur Dom
mais ca peut t'aider

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

cordialement
0
[-- Jibé --] Messages postés 16 Statut Membre 32
 
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.
0
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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?

.  .
\_/
0
Pitu Messages postés 1460 Statut Contributeur 125
 
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
0
[-- Jibé --] Messages postés 16 Statut Membre 32
 
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 ?
0
cedric
 
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
0
daddou20000010 Messages postés 9 Statut Membre 2
 
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
0