
//
// Classes et interfaces de l'interface JAXP utilisée
//
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;

//
// Exceptions possibles lors de la consommation du document XML
//
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

//
// Outils généraux d'entrée/ sortie sur des fichiers
//
import java.io.File;
import java.io.IOException;

//
// DOM et ses exceptions (du W3C)
//
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;

//
// Notre petite classe
//
public abstract class ConsommateurDOM {
   public ConsommateurDOM () {
   }

   protected abstract void traiter (Document doc);

   public void consommer (String nomFich) {
      //
      // Un consommateur de document DOM se crée à travers une
      // fabrique (schéma de conception Factory)
      //
      DocumentBuilderFactory Fabrique = DocumentBuilderFactory.newInstance();
      //
      // Pas défaut, les bâtisseurs créés par une fabrique DOM ne s'occupent
      // pas de la validation et des espaces nommés. Faut explicitement leur
      // indiquer que nous voulons ce niveau de support.
      //
      /*
      Fabrique.setValidating(true);
      */
      Fabrique.setNamespaceAware(true);
      try {
         DocumentBuilder Bâtisseur = Fabrique.newDocumentBuilder();
         Document doc = Bâtisseur.parse (new File(nomFich));
         traiter (doc);
      } catch (SAXException sxe) {
         //
         // Erreurs de traitement du document
         //
         Exception ex =
            (sxe.getException() != null)? sxe.getException() : sxe;
         ex.printStackTrace();
      } catch (ParserConfigurationException pce) {
         //
         // Erreurs d'option de traitement
         //
         pce.printStackTrace();
      } catch (IOException ioe) {
         //
         // Erreurs générales d'entrée/ sortie
         //
         ioe.printStackTrace();
      }
   }
}