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