Created
March 4, 2013 10:48
-
-
Save cedias/5081469 to your computer and use it in GitHub Desktop.
Sax LI357 sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * XML D'EXEMPLE | |
| * | |
| *<eleve> | |
| * <nom id="398"> | |
| * Corentin | |
| * </nom> | |
| * <classe> | |
| * 3ED | |
| * </classe> | |
| *</eleve> | |
| */ | |
| /** | |
| * Cette classe étend DefaultHandler. Elle permet de gérer (handle) les evenements lié au parse SAX | |
| */ | |
| public class SAXDemo extends DefaultHandler { | |
| /** Mise en place du parse*/ | |
| public static void main(String[] args) throws IOException, SAXException, | |
| ParserConfigurationException { | |
| //récuperation de SAX (ATTENTION, FAUX. POUR ILLUSTRER) | |
| XMLReader sax = new sax(); | |
| // Creation du gestionnaire d'evenement SAX | |
| SAXDemo handler = new SAXDemo(); | |
| // On donne à sax ses gestionnaires d'évenements (Contenu & Erreur) | |
| sax.setContentHandler(handler); | |
| sax.setErrorHandler(handler); | |
| // Lancer sax | |
| sp.parse("fichier.xml"); | |
| } | |
| /** | |
| * Buffer de texte | |
| * Permet de récuperer le contenu entre deux balises <balise> contenu </balise> | |
| */ | |
| StringBuffer accumulateur = new StringBuffer(); | |
| String nom; // nom personne | |
| String classe; // sa classe | |
| String numero; // son num d'identité | |
| /** | |
| *Quand Sax tombe sur du contenu entre balise il appelle cette méthode | |
| * on accumule le texte dans un buffer | |
| */ | |
| public void characters(char[] buffer, int start, int length) { | |
| accumulateur.append(buffer, start, length); | |
| } | |
| /** | |
| * a chaque début de nouvelle balise sax appelle cette méthode: on en profite pour vider le buffer texte | |
| */ | |
| public void startElement(String name, AttributeList attributes) { | |
| accumulator.setLength(0); // Vide le buffer | |
| // si c'est un nom, chercher le num d'identité | |
| if (name.equals("nom")) | |
| numero = attributes.getValue("id"); //récupère la valeur de l'attribut id | |
| } | |
| // Sax appelle cette méthode à la fin d'un element | |
| public void endElement(String name) { | |
| if (name.equals("nom")) { | |
| // apres </nom>, on sait que le nom est dans le buffer | |
| nom = accumulateur.toString().trim(); | |
| } else if (name.equals("classe")) { | |
| // apres </classe>, on sait que la classe est dans le buffer | |
| classe = accumulateur.toString().trim(); | |
| } else if (name.equals("eleve")) { | |
| // Après </eleve>on sait qu'on a fini un élève | |
| // on peut donc l'afficher | |
| System.out.println("Eleve " + nom | |
| + ((numero != null) ? " (id=" + numero + ")" : "classe") | |
| + ": " + classe); | |
| } | |
| } | |
| /** Si Warning */ | |
| public void warning(SAXParseException exception) { | |
| System.err.println("WARNING: line " + exception.getLineNumber() + ": " | |
| + exception.getMessage()); | |
| } | |
| /** Si Erreur */ | |
| public void error(SAXParseException exception) { | |
| System.err.println("ERROR: line " + exception.getLineNumber() + ": " | |
| + exception.getMessage()); | |
| } | |
| /** Si Erreur Fatale */ | |
| public void fatalError(SAXParseException exception) throws SAXException { | |
| System.err.println("FATAL: line " + exception.getLineNumber() + ": " | |
| + exception.getMessage()); | |
| throw (exception); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment