Syntaxe

xsl:output permet d'affiner le format de sortie de la transformation XSL. Sa syntaxe complète est la suivante :

<xsl:output
method="xml|html|text|name"
version="string"
encoding="string"
omit-xml-declaration="yes|no"
standalone="yes|no"
doctype-public="string"
doctype-system="string"
cdata-section-elements="namelist"
indent="yes|no"
media-type="string"/>

Détail des options

Voyons les options une à une.

method

Indique le format du fichier de sortie :

par exemple :

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='json'/>
...

version

Indique la version du contenu cible.

encoding

Permet d'indiquer le jeu de caractères utilisé en sortie. Par exemple :

encoding="iso-8859-1"

pour le jeu de caractères "Français", ou encore :

encoding="utf-8"

pour le jeu de caractères "unicode".

Cette option n'est pas forcément dans le même jeu de caractères que les données d'entrée et permet, par exemple, de convertir un jeu de caractère dans un autre. Si l'on dispose d'un fichier multilingue en entrée (utf-8) et que l'on veuille en sortir une documentation adressée à des Français uniquement, l'on aura alors :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml"
version="1.0"
encoding="iso-8859-1"
indent="yes"/>

omit-xml-declaration

Permet de générer ou pas la première ligne indiquant un fichier XML :

<?xml version="1.0" ...?><

Si omit-xml-declaration="yes" alors cette ligne ne sera pas présente dans le fichier de sortie.

la valeur par défaut est "no".

doctype-public

Permet de définir la valeur de l'attribut PUBLIC de l'élément DOCTYPE dans le document final :

<xsl:output
method="xml"
encoding="iso-8859-1"
doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
indent="yes"/>

va permettre de générer le fichier XML suivant :

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN">
<book>
...

doctype-system

Permet de définir la valeur de l'attribut SYSTEM de l'élément DOCTYPE dans le document final :

<xsl:output
method="xml"
encoding="iso-8859-1"
doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
indent="yes"/>

va permettre de générer le fichier XML suivant :

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book SYSTEM "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<book>
...

doctype-public + doctype-system

Dans le cas où vous utilisez doctype-public + doctype-system en même temps, la forme obtenue est légèrement différente ce qui pourrait être attendu :

<xsl:output
method="xml"
encoding="iso-8859-1"
doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
indent="yes"/>

va permettre de générer le fichier XML suivant :

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<book>
...

On remarque que le mot clef SYSTEM est implicite.

media-type

Permet de spécifique le type MIME du fichier de sortie :

XSLT 2.0

La version 2.0 du XSLT fait apparaître des capacités supplémentaires. Si la forme de xsl:output ne change pas, le nombre d'occurences utilisables, en revanche, augmente.

En effet, avec XSLT 2.0, il devient possible de générer plusieurs fichiers de sortie avec une seule tranformation (grâce à la commande xsl:result-document). Comme chaque fichier peut avoir un format différent, il est possible de définir plusieurs sorties distinctes, de types différents.

<xsl:output
method="text"
indent="yes"
encoding="iso-8859-1"/>

<xsl:output
method="text"
indent="yes"
encoding="utf-8"
name="ics"/>

<xsl:output
method="text"
indent="yes"
encoding="Windows-1252"
name="bat"/>

Notez dans cet exemple trois définitions. La classique servant de format par défaut, un autre définit par name="ics", un troisième par name="bat". Pour les utiliser, il suffira simplement de les appeler au bon endroit :

<xsl:result-document href="{$filename}" format="ics">
...
</xsl:result-document>

et :

<xsl:result-document href="{$filename}" format="bat">
...
</xsl:result-document>