Création de l'arbre d'élément du document selon le DOM Document Object Model, puis parcours de cet arbre pour afficher les noeuds et leurs caractéristiques.
// Dom1.java
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.io.IOException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.DOMException;
public class Dom1
{
public static void main (String argv [])
throws IOException
{
if (argv.length != 1) {
System.err.println ("Usage: cmd filename");
System.exit (1);
}
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
// recuperer une fabrique de constructeur de Dom
try {
DocumentBuilder builder = factory.newDocumentBuilder();
// recuperer un constructeur de Dom
Document document = builder.parse( new File(argv[0]) );
// parser pour construire le Dom
Element rootElement = document.getDocumentElement() ;
// recuperer le premier element du Dom (cad root)
printDomTree (rootElement, "");
} catch (Throwable t) {
t.printStackTrace ();
System.exit (1);
}
System.exit (0);
}
public static void printDomTree (Node node, String indent)
// ume methode pour afficher le sous-arbre Dom
// à partir du noeud node en paramètre
// avec une indentation conformement à l'arbre d'élément
{ String type;
switch (node.getNodeType()) {
// type d'élément XML
case Node.ATTRIBUTE_NODE :
type = "attribut"; break;
case Node.CDATA_SECTION_NODE :
type = "CDATA"; break;
case Node.COMMENT_NODE :
type = "comment"; break;
case Node.DOCUMENT_FRAGMENT_NODE :
type = "document fragment"; break;
case Node.DOCUMENT_NODE :
type = "document"; break;
case Node.DOCUMENT_TYPE_NODE :
type = "document type"; break;
case Node.ELEMENT_NODE :
type = "node"; break;
case Node.ENTITY_NODE :
type = "entity"; break;
case Node.ENTITY_REFERENCE_NODE :
type = "entity reference"; break;
case Node.NOTATION_NODE :
type = "notation"; break;
case Node.PROCESSING_INSTRUCTION_NODE :
type = "processing instruction"; break;
case Node.TEXT_NODE :
type = "text"; break;
default : type = "none";
}
System.out.println(indent+"type : " + type);
System.out.println(indent+"noeud name : "
+node.getNodeName());
// nom de l'élément ou de l'attribut ou ..
System.out.println(indent+"value : "
+node.getNodeValue());
// valeur de l'attribut ou texte d'un élément texte ou ..
if (node.hasChildNodes()) {
// comme les Tree-s JAVA .....
Node nextFils = node.getFirstChild();
while (nextFils != null) {
printDomTree (nextFils, indent+" ");
nextFils = nextFils.getNextSibling();
}
}
}
}
$ java Dom1 dialogue7.xml type : node noeud name : dialogue value : null type : node noeud name : situation value : null type : text noeud name : #text value : acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante. type : node noeud name : replique value : null type : node noeud name : personnage value : null type : text noeud name : #text value : madame pernelle type : node noeud name : texte value : null type : text noeud name : #text value : Allons, Flipote, allons, que d'eux je me délivre.....
Et les attributs ...Programme
// Dom15.java // // afficher le Dom avec les attributs import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.NamedNodeMap; .................. // meme programme que Dom1.java System.out.println(indent+"value : " +node.getNodeValue()); if (node.hasAttributes()) { NamedNodeMap attList = node.getAttributes(); // recupere la liste des attributs for (int i=0; i<attList.getLength(); ++i) printDomTree (attList.item(i), indent+" "); } if (node.hasChildNodes()) { Node nextFils = node.getFirstChild(); while (nextFils != null) { printDomTree (nextFils, indent+" "); nextFils = nextFils.getNextSibling(); } } } }
$ java Dom15 dialogue9.xml java Dom15 dialogue9.xml type : node noeud name : dialogue value : null type : node noeud name : situation value : null type : text noeud name : #text value : acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante. type : node noeud name : replique value : null type : node noeud name : personnage value : null type : attribut noeud name : attitude value : pressée type : attribut noeud name : geste value : marchant vite type : text noeud name : #text value : madame pernelle type : node noeud name : texte value : null type : attribut noeud name : ton value : fort type : text noeud name : #text value : Allons, Flipote, allons, que d'eux je me délivre.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.
...