Transformation selon une feuille de style XSLT : le problème
vu du coté des APIs JAVA.
Un cours sur le langage de
transformation XSLT est accessible sur ce site.
// Transform.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 javax.xml.transform.stream.StreamSource;
import java.io.*;
public class Transform
{
public static void main (String argv [])
{
if (argv.length != 2){
System.err.println ("Usage: java Transform fileXSLT filesource ");
System.exit (1);
}
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(argv[1]));
TransformerFactory transformFactory =
TransformerFactory.newInstance();
StreamSource styleSource =
new StreamSource(new File(argv[0]));
// lire le style
Transformer transform =
transformFactory.newTransformer(styleSource);
// conformer le transformeur au style
DOMSource in = new DOMSource(doc);
StreamResult out = new StreamResult(System.out);
transform.transform(in, out);
// transformer selon le style
} 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();
}
}
}
$ java Transform style0.xsl dialogue9.xml acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante.madame pernelleAllons, Flipote, allons, que d'eux je me délivre.elmireVous marchez d'un tel pas qu'on a peine à vous suivre.madame pernelleLaissez, ma bru, laissez, ne venez pas plus loin: Ce sont toutes façons .... // tous les textes y sont, manque le reste ! .....La feuille de style "style0" précise que :
- que le format de flux résultat est : text ascii fr-latin
- pour chacun des éléments, on applique les règles de transformations sur ses sous-éléments (autre que attribut)
- que les textes et valeurs d'attributs sont recopiés.
- que les commentaires et processing-instructions sont ignorés.
$ java Transform style1.xsl dialogue6.xml <?xml version="1.0" encoding="iso-8859-1"?> <dialogue> <situation>acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante.</situation> <replique> <personnage>madame pernelle</personnage> <texte>Allons, Flipote, allons, que d'eux je me délivre.</texte> </replique> <replique> <personnage>elmire</personnage> <texte>Vous marchez d'un tel pas qu'on a peine à vous suivre.</texte> // tous les textes et éléments y sont, manque les attributs ! ....La feuille de style "style1" précise que :
- que le format de flux résultat est : xml en iso-8859-1
- pour chacun des éléments, on copie l'élément (sans ses attributs) et applique les règles de transformations sur ses sous-éléments (autre que attribut)
- que les textes et valeurs d'attributs sont recopiés.
- que les commentaires et processing-instructions sont ignorés.