création ex-nihilo d'un arbre "Dom"

Création directement de l'arbre selon le DOM Document Object Model, à l'aide de méthode de création de noeud et de d'insertion de noeud dans l'arbre.

Programme

// Creer_dom_interactif.java

/**
 * création d'un DOM sans parsing
 * en saisissant les répliques du Tartuffe
 * puis écriture d'un document XML *
 */

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.w3c.dom.Node;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Creer_dom_interactif {
  public static BufferedReader bufIn= null;
  public static void main (String argv []) {
    bufIn= new BufferedReader(new InputStreamReader(System.in));
    DocumentBuilderFactory factory = 
            DocumentBuilderFactory.newInstance();
    try {
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document doc = builder.newDocument();
      // creation d'un nouveau document vierge
      Element racine = doc.createElement("dialoque");
      // creation d'un nouvel élément
      doc.appendChild(racine);
      // ajout du premier noeud (racine) dans le document
      Element situation = doc.createElement("situation");
      racine.appendChild(situation);
      // ajout d'un noeud fils a un autre noeud
      Text descriptif = doc.createTextNode("acte I, Scene 1");
      // creation d'un nouveau noeud text
      situation.appendChild(descriptif);
      String lu;
      do {
        System.out.println("nouvelle réplique ? oui/non");
        lu = lire();
        if (lu.indexOf("oui") != -1) {
          Element replique = doc.createElement("replique");
          racine.appendChild(replique);
          System.out.println("donnez le personnage :");
          Element personnage = doc.createElement("personnage");
          replique.appendChild(personnage);
          lu = lire().trim();
          Text nom = doc.createTextNode(lu);
          personnage.appendChild(nom);
          System.out.println("donnez son texte :");
          Element texte = doc.createElement("texte");
          replique.appendChild(texte);
          lu = lire().trim();
          Text t = doc.createTextNode(lu);
          texte.appendChild(t);
        }
      }
      while (lu.indexOf("non") == -1);
      doc.getDocumentElement().normalize();
      // normalise le sous-arbre de ce noeud : cad pas de 
      // noeud text juxtaposé ni de vide !
      printDomTree (doc, "");
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    }
  }

  public static void printDomTree (Node node, String indent)
   .......
  public static String lire() {
    try {
      return bufIn.readLine();
    } catch (IOException e) {
      System.err.println("erreur de saisie : " +e.getMessage());
      System.exit(2);
      return null;
    }
  }
}

 

exercice :

Consulter la doc de l'API JAXP pour permêtre la saisie d'un attribut ton dans le programme précédent. Utiliser pour la visualisation de l'arbre obtenu la methode printDomTree de Dom15.java

 

 index  suivant