création du Dom à partir d'un fichier xml et parcours

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.

Programme

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

commandes et résultats

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

commandes et résultats

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

 


  

 index  suivant