Consommer un document XML, approche DOM (code de base, classe abstraite)

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

Le code proposé à droite est celui d'une petite classe susceptible de servir de base pour développer des programmes capables de consommer un document XML selon une approche DOM.

Tel quel, le code présenté ici ne fait rien, mais se veut une base de travail pour mettre en place du code capable, lui, de consommer un document XML dans le but de réaliser une tâche concrète.

Vous trouverez un exemple d'utilisation de cette classe (une classe dérivée, en fait) à cet endroit. Une version alternative de ce code de base se trouve ici.