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)"/>