"Parsing" ET traitement par Handler

Programme

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

commandes et résultats

$ 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
 

autre "parsing"

$ 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
endDocument

exercice :

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."
...

 

 index  suivant