// Analyse1.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 Analyse1 extends DefaultHandler { public static void main (String argv[]) throws IOException { if (argv.length != 1) { System.err.println ("Usage: Analyse1 fichierSource"); System.exit (2); } DefaultHandler handler = new Analyse1(); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); // la factory produira un parseur validant try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(argv[0]), handler ); } catch (SAXException e) { // prise en charge des erreurs SAX // donc en particulier celles de parsing System.out.println ("erreur de parsing"); System.exit (1); } catch (Throwable t) { t.printStackTrace (); System.out.println ("erreur autre que parsing"); System.exit (2); } System.out.println ("parsing reussi"); System.exit (0); } public void error(SAXParseException e) // le "handler" (le traitement) lors du // parsing d'une erreur throws SAXParseException { throw e; // transmettre au lieu, par defaut, d'ignorer } }
$ java Analyse1 dialogue3.xml parsing reussi
<?xml version='1.0' encoding='ISO-8859-1' standalone='no' ?>
<!-- fichier dialogue3err1.xml --><!DOCTYPE dialogue SYSTEM "dia2.dtd">
<!-- extrait de Tartuffe de Molière -->
<dialogue>
<situation>acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante.</situation>
<replique>
<texte>Allons, Flipote, allons, que d'eux je me délivre.</texte>
<personnage>madame pernelle</personnage>
</replique>
</dialogue>
$ java Analyse1 dialogue3err1.xml erreur de parsing $ java Analyse0 dialogue3err1.xml Analyse0 n'est pas un parseur validant et dialogue3err1.xml est bien formé !
// Analyse2.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 Analyse2 extends DefaultHandler {
public static void main (String argv[])
throws IOException {
if (argv.length != 1) {
System.err.println
("Usage: Analyse2 fichierSource");
System.exit (1);
}
DefaultHandler handler = new Analyse2();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
SAXParser saxParser = factory.newSAXParser();
saxParser.parse( new File(argv[0]), handler );
} catch (SAXParseException e) {
// prise en charge des erreurs de parsing
System.out.println("\n** Parsing error"
+ ", line " + e.getLineNumber()
+ ", uri " + e.getSystemId());
System.out.println(" " + e.getMessage() );
if (e.getException() != null)
e.getException().printStackTrace();
System.exit (2);
} catch (SAXException e) {
// prise des erreurs SAX
if (e.getException() != null)
e.getException().printStackTrace();
System.exit (3);
} catch (ParserConfigurationException e) {
// prise en charge des erreurs de
// configuration (factory)
e.printStackTrace();
System.exit (4);
} catch (IOException e) {
e.printStackTrace();
System.exit (5);
}
System.out.println ("parsing reussi");
System.exit (0);
}
public void error(SAXParseException e)
throws SAXParseException
{
throw e;
}
}
$ java Analyse2 dialogue3err1.xml
** Parsing error, line 10,
uri file:/home/ferment/site_upjv/xml/dialogue3err1.xml
org.apache.crimson.parser/V-036 replique texte
$ java Analyse2 dialogue1err1.xml
** Parsing error, line 5,
uri file:/home/ferment/site_upjv/xml/dialogue1err1.xml org.apache.crimson.parser/V-005 dialogue