"Parsing" validant

Programme

// 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
  }
}

 

commandes et résultats

$  java Analyse1 dialogue3.xml
parsing reussi

un document non valide

fichier dialogue3err1.xml :

<?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>

parsing validant :

$  java Analyse1 dialogue3err1.xml
erreur de parsing
$  java Analyse0 dialogue3err1.xml
Analyse0 n'est pas un parseur validant et
dialogue3err1.xml est bien formé !

traitement des erreurs :

// 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

 

 

 index  suivant