XSLT

De Octet.ca

Cet article expose comment utiliser XSLT.

XSLT en ligne de commande[modifier]

Je connais 2 programmes pour faire du XSLT en ligne de commande:

  1. xsltproc;
  2. 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)"/>

Liens[modifier]