XSLT
De Octet.ca
Cet article expose comment utiliser XSLT.
Sommaire
XSLT en ligne de commande[modifier]
Je connais 2 programmes pour faire du XSLT en ligne de commande:
- xsltproc;
- Xalan.
Pour pouvoir écrire plusieurs fichiers en sortie, il faut passer par xalan. xmlproc sert plutôt à faire du développement parce qu'on a le résultat directement en ligne.
xsltproc[modifier]
Pour utiliser xsltproc, il faut l'invoquer de la manière suivante:
xsltproc transformation.xsl input.xml
Xalan[modifier]
Xalan est un programme java qui peut-être appelé en ligne de commande. Il faut spécifier de façon on ne peut plus explicite le CLASSPATH pour pouvoir l'exécuter sans erreur désagréable.
export CLASSPATH='/usr/share/xalan/lib/serializer.jar: \ /usr/share/xalan/lib/xalan.jar: \ /usr/share/xerces-2/lib/xercesImpl.jar: \ /usr/share/xml-commons-external-1.3/lib/xml-apis-ext.jar:\ /usr/share/xml-commons-external-1.3/lib/xml-apis.jar' java org.apache.xalan.xslt.Process -IN input.xml -XSL transformation.xsl -OUT foo.out -PARAM CODENAME parametre
Remplacer un caractère par un autre[modifier]
Dans XSLT 1.0, la fonction replace n'existe pas. Copie d'un exemple de template:
<xsl:template name="replaceCharsInString">
<xsl:param name="stringIn"/>
<xsl:param name="charsIn"/>
<xsl:param name="charsOut"/>
<xsl:choose>
<xsl:when test="contains($stringIn,$charsIn)">
<xsl:value-of select="concat(substring-before($stringIn,$charsIn),$charsOut)"/>
<xsl:call-template name="replaceCharsInString">
<xsl:with-param name="stringIn" select="substring-after($stringIn,$charsIn)"/>
<xsl:with-param name="charsIn" select="$charsIn"/>
<xsl:with-param name="charsOut" select="$charsOut"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$stringIn"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
On utilise le template de cette façon:
<xsl:variable name="myString" select="'This%20is%20Test'"/>
<xsl:variable name="myNewString">
<xsl:call-template name="replaceCharsInString">
<xsl:with-param name="stringIn" select="string($myString)"/>
<xsl:with-param name="charsIn" select="'%20'"/>
<xsl:with-param name="charsOut" select="' '"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="myNewRealString" select="string($myNewString)"/>