Transformation d'un Dom en fichier XML

A partir d'un arbre Dom, un transformeur (par defaut) permet d'obtenir le fichier XML équivalent.

Programme

// PrintDom.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 org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;

public class PrintDom
{
    public static void main (String argv [])
    {
        if ((argv.length <1) || (argv.length > 2)){
            System.err.println ("Usage: java PrintDom filename [validate]");
            System.exit (1);
        }
        DocumentBuilderFactory factory =
            DocumentBuilderFactory.newInstance();
        if ((argv.length == 2)&&(argv[1].equals("validate")) )
          factory.setValidating(true);
        else
          factory.setValidating(false);
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new File(argv[0]));
            TransformerFactory transformFactory =
                TransformerFactory.newInstance();
            // recupérer une fabrique de transformeur 
            Transformer transform = transformFactory.newTransformer();
            // recupérer un transformeur par defaut :
            // qui ne transforme rien !!
            DOMSource in = new DOMSource(doc);
            // définir l'arbre Dom source de la transformation 
            StreamResult out = new StreamResult(System.out);
            // définir le flot résultat de la transformation 
            transform.transform(in, out);
            // transformer (içi : rien !!!) 
        } catch (TransformerConfigurationException e) {
           System.out.println (" Transformer Factory error");
           System.out.println("   " + e.getMessage() );
           Throwable x = e;
           if (e.getException() != null)
               x = e.getException();
           x.printStackTrace();
        } catch (TransformerException e) {
           System.out.println ("Transformation error");
           System.out.println("   " + e.getMessage() );
           Throwable x = e;
           if (e.getException() != null)
               x = e.getException();
           x.printStackTrace();
         } catch (SAXException e) {
           Exception  x = e;
           if (e.getException() != null)
               x = e.getException();
           x.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (Exception e)  {
           e.printStackTrace();
        }
    }
}

commandes et résultats

$ java PrintDom dialogue6.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- fichier dialogue6.xml --><!-- extrait de Tartuffe de Molière -->
<dialogue><situation>acte I, Scene 1 : madame pernelle et 
// le fichier XML est bien le même que celui de départ
flipote sa servante,elmire, mariane, dorine, damis, cléante.</situation>
<replique>
// a part, quelques caractères bizarres pour les accentués, mais
// nous affichons de l'UTF-8 à l'aide d'un lecteur d'ASCII 
<personnage attitude="pressée" geste="marchant vite">
madame pernelle</personnage>
<texte ton="fort">Allons, Flipote, allons, que d'eux je me délivre.
</texte>
</replique>
<replique>
<personnage attitude="essouflée">elmire</personnage>
<texte ton="normal">Vous marchez d'un tel pas qu'on a peine à vous suivre.</texte>
....

 

 

 index  suivant