Skip to content

Instantly share code, notes, and snippets.

@cedias
Created March 4, 2013 10:48
Show Gist options
  • Select an option

  • Save cedias/5081469 to your computer and use it in GitHub Desktop.

Select an option

Save cedias/5081469 to your computer and use it in GitHub Desktop.
Sax LI357 sample
/**
* 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