// Analyse3.java
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
public class Analyse3 extends DefaultHandler {
// plusieures méthodes de DefaultHandler (qui
// ne font rien) vont être redéfinies
static private FileWriter dest;
public static void main (String argv[])
throws IOException {
if (argv.length != 2) {
System.err.println
("Usage: Analyse3 fichierSource fichierCible");
System.exit (1);
}
File fichierDest = new File(argv[1]);
dest = new FileWriter(fichierDest);
DefaultHandler handler = new Analyse3();
// les "handlers" (traitement) seront ceux de
// la classe Analyse3
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
saxParser.parse( new File(argv[0]), handler );
// parser et lancer les traitements du handler
} catch (Throwable t) {
t.printStackTrace ();
System.exit (2);
}
System.exit (0);
}
public void error(SAXParseException e)
// le "handler" (traitement) d'une erreur
throws SAXParseException
{
throw e;
}
public void startDocument ()
// le "handler" de la balise debut-racine
throws SAXException {
ecrit("startDocument");
nl();
}
public void endDocument ()
// le "handler" appelé lors du parsing
// de la balise de fin de document
throws SAXException {
ecrit("endDocument");
nl();
}
public void startElement (String namespaceURI,
String simpleName,
String qualifiedName,
Attributes attrs)
// le "handler" appelé lors du parsing <element>
throws SAXException {
String elementName = simpleName;
if (elementName.equals(""))
elementName = qualifiedName;
ecrit("startElement : "+ elementName);
nl();
}
public void endElement (String namespaceURI,
String simpleName,
String qualifiedName)
// le "handler" appelé lors du parsing </element>
throws SAXException {
String elementName = simpleName;
if (elementName.equals(""))
elementName = qualifiedName;
ecrit("endElement : "+ elementName);
nl();
}
public void characters (char buf [],
int offset, int len)
// le "handler" appelé lors du parsing de PCDATA
throws SAXException {
String s = new String(buf, offset, len);
ecrit (s);
nl();
}
private void nl()
throws SAXException {
String lineEnd = System.getProperty("line.separator");
try {
dest.write (lineEnd);
} catch (IOException e) {
throw new SAXException ("I/O error", e);
}
}
private void ecrit(String s)
throws SAXException {
try {
dest.write (s);
dest.flush ();
} catch (IOException e) {
throw new SAXException ("I/O error", e);
}
}
}
$ java Analyse3 dialogue3.xml result.txt [ferment@didier xml]$ more result.txt startDocument startElement : dialogue startElement : situation acte I, Scene 1 : madame pernelle et flipote sa servante, elmire, mariane, dorine, damis, cléante. endElement : situation startElement : replique startElement : personnage madame pernelle endElement : personnage startElement : texte Allons, Flipote, allons, que d'eux je me délivre. endElement : texte endElement : replique startElement : replique startElement : personnage elmire endElement : personnage startElement : texte Vous marchez d'un tel pas qu'on a peine à vous suivre. endElement : texte endElement : replique startElement : replique startElement : personnage madame pernelle endElement : personnage startElement : texte Laissez, ma bru, laissez, ne venez pas plus loin: Ce sont toutes façons dont je n'ai pas besoin. endElement : texte endElement : replique startElement : replique startElement : personnage elmire endElement : personnage startElement : texte De ce que l'on vous doit envers vous on s'acquitte, Mais ma mère, d'où vient que vous sortez si vite; endElement : texte endElement : replique
$ javac Analyse3.java
$ java Analyse3 dialogue5.xml result.txt
$ cat result.txt
startDocument
startElement
startElement
acte I, Scene 1 :
madame pernelle
et flipote sa servante,
elmire
, mariane, dorine, damis, cléante.
les entités internes et externes ont été résolues !
endElement
startElement
startElement
madame pernelle
endElement
startElement
Allons, Flipote, allons, que d'eux je me délivre.
endElement
endElement
startElement
startElement
elmire
endElement
startElement
Vous marchez d'un tel pas qu'on a peine à vous suivre.
endElement
endElement
startElement
startElement
madame pernelle
endElement
startElement
Laissez, ma bru, laissez, ne venez pas plus loin: Ce sont toutes façons dont je n'ai pas besoin.
endElement
endElement
startElement
startElement
elmire
endElement
startElement
De ce que l'on vous doit envers vous on s'acquitte, Mais ma mère, d'où vient que vous sortez si vite;
endElement
endElement
endElement
endDocumentexercice :
Changer les traitements pour obtenir :
madame pernelle : "Allons, Flipote, allons, que d'eux je me délivre."
elmire : "Vous marchez d'un tel pas qu'on a peine à vous suivre."
...