Les objets Transformer sont responsables du recueil des paramètres nécessaires à la feuille de style de transformation et également de préciser des propriétés de sortie.

Fournir des paramètres à l'objet Transformer revient à préciser des valeurs aux éléments XSLT xsl:param correspondants dans une feuille de style de transformation. Ces valeurs seront exploitées durant le processus de transformation.

Les paramètres
transformeur.setParameter("parametre", "Une valeur");

<!-- Feuille de style -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns="http://www.w3.org/TR/xhtml1/strict">
  <xsl:output method="html" encoding="ISO-8859-1"/>
  <xsl:param name="parametre">Valeur par défaut</xsl:param>
  <!-- ... -->
</xsl:stylesheet>

Le nom de chaque paramètre soumis à la méthode setParameter() doit être parfaitement identique à celui auquel il se réfère dans la feuille de style XSLT.

Les propriétés de sortie correspondent aux attributs de l'élément XSLT xsl:output. Ces propriétés indiquent au processeur XSL comment mettre en forme le résultat de la transformation.

//Les propriétés de sortie
Properties proprietes = new Properties();
proprietes.put("method", "xml");
proprietes.put("version", "1.0");
proprietes.put("encoding", "ISO-8859-1"); 
proprietes.put("standalone", "no");
proprietes.put("indent", "yes");
proprietes.put("omit-xml-declaration", "no");
proprietes.put("doctype-public", "-//W3C//DTD XHTML 1.1//EN");
proprietes.put("doctype-system", "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd");
proprietes.put("media-type", "text/xhtml");

transformeur.setOutputProperties(proprietes);

Les noms de propriété de sortie sont tous référencés dans la classe OutputKeys sous la forme de constantes. L'utilisation de ces constantes permettra d'éviter des fautes d'orthographes malencontreuses dans l'affectation de valeurs aux propriétés.

transformateur.setOutputProperty(OutputKeys.METHOD, "html");
transformateur.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
transformateur.setOutputProperty(OutputKeys.INDENT, "yes");

Les propriétés peuvent être affectées individuellement à l'objet Transformer, en utilisant la méthode setOutputProperty().

transformeur.setParameter(OutputKeys.INDENT, "yes");

Les paramètres et les propriétés de sortie sont disponibles pour une consultation en invoquant respectivement les méthodes getParameter() et getOutputProperty().

Object valParametre = transformeur.getParameter("parametre");

String valPropriete = transformeur.getOutputProperty(OutputKeys.INDENT);

Les propriétés peuvent être toutes obtenues dans une collection Properties au moyen de la méthode getOutputProperties().

Properties proprietes = transformeur.getOutputProperties();
Set ensemble = proprietes.entrySet();
Iterator ite = ensemble.iterator();
while(ite.hasNext()){
  Map.Entry entree = (Map.Entry)ite.next();
  System.out.println(entree.getKey() + " = " + entree.getValue());
}

La méthode clearParameters() se charge de supprimer tous les paramètres assignés à l'objet Transformer.

transformeur.clearParameters();

La réinitialisation de l'objet Transformer à son état initial, s'accomplit en appelant la méthode reset(), laquelle supprime notament tous les paramètres et les propriétés définis auparavant. Toutefois, les objets URIResolver et ErrorListener peuvent subir un remplacement par d'autres objets au fonctionnement équivalent.

transformeur.reset();
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class Programme implements Runnable {
    private String encodage;
    private String cheminXML;
    private String cheminXSL;
    private String cheminHTML;
    private String numero;

    public Programme(
                     String cheminXML, 
                     String cheminXSL, 
                     String cheminHTML, 
                     String numero, 
                     String encodage) {
        this.cheminXML = cheminXML;
        this.cheminXSL = cheminXSL;
        this.cheminHTML = cheminHTML;
        this.numero = numero;
        this.encodage = encodage;
    }
    public Programme(
                     String cheminXML, 
                     String cheminXSL, 
                     String cheminHTML, 
                     String numero) {
        this(cheminXML, cheminXSL, cheminHTML, 
                        numero, System.getProperty("file.encoding"));
    }
    public void transformer(DocumentXML xml, DocumentXML xsl) {
        try {
            DOMSource sourceXSL = new DOMSource(xsl.getDocument());
            TransformerFactory fabrique = TransformerFactory.newInstance();
            Transformer transformateur = fabrique.newTransformer(sourceXSL);

            transformateur.setOutputProperty(OutputKeys.METHOD, "html");
            transformateur
                    .setOutputProperty(OutputKeys.ENCODING, this.encodage);
            transformateur.setOutputProperty(OutputKeys.INDENT, "yes");

            transformateur.setParameter("num", numero);

            File fichier = new File(cheminHTML);
            FileOutputStream fos = new FileOutputStream(fichier);

            if (fos != null) {
                Result sortie = new StreamResult(fos);
                DOMSource sourceXML = new DOMSource(xml.getDocument());
                transformateur.transform(sourceXML, sortie);
                System.out.println("Transformation réussie : " + fichier.toString());
            }
            fos.flush();
            fos.close();
        }
        catch (TransformerConfigurationException e) {
            e.printStackTrace();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (TransformerException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void traitement(
                         DocumentXML xml, 
                         DocumentXML xsl) {
        synchronized(DocumentXML.class) {
            xml.chargerDocument(this.cheminXML);
            xsl.chargerDocument(this.cheminXSL);
            transformer(xml, xsl);
        }
    }
    public void run() {
        DocumentXML xml = new DocumentXML();
        DocumentXML xsl = new DocumentXML();
        traitement(xml, xsl);
    }
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            Programme prog = new Programme(
                                           "logitheque.xml", 
                                           "logitheque.xsl", 
                                           "resultat" + i + ".html", 
                                           String.valueOf(i));
            Thread t = new Thread(prog);
            t.start();
        }
    }
}

//Fichier : DocumentXML.java
public class DocumentXML {
    private Document document;

    public DocumentXML() {
        super();
    }
    public synchronized void chargerDocument(String source) {
        try {
        DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
        fabrique.setNamespaceAware(true);
        DocumentBuilder constructeur = fabrique.newDocumentBuilder();
        document = constructeur.parse(new File(source));
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    public synchronized Document getDocument() {
        return document;
    }
    public synchronized Element getRacine() {
        return this.document.getDocumentElement();
    }
    public synchronized DocumentType getDTD() {
        return this.document.getDoctype();
    }
    public synchronized String getEncodage() {
        return this.document.getXmlEncoding();
    }
    public synchronized String getVersionXML() {
        return this.document.getXmlVersion();
    }
    public synchronized void fournirURI(String uri) {
        this.document.setDocumentURI(uri);
    }
}