XSLT
Application d' une feuille de style XSLT à un document XML.
Cette classe permet d' appliquer une feuille de style XSLT à un document XML. La transformation peut être effectuée de différentes manières : soit en utilisant les extensions que PHP fournit : php-XSLT ou php-DOMXML-XSLT, soit en ligne de commande avec SABLOTRON, XALAN ou XSLTPROC. L' implementation de ces processeurs n' étant pas forcement la meme, certains exemples peuvent poser problème selon votre version de SABLOTRON ou de XALAN, notemment les exemples 3 et 4 qui utilisent des espaces de noms apparemment pas encore supportés sur mes versions de TEST (SABLOTRON 0.98).
Les Méthodes
- XSLT - Nouvelle Instance
- Load_XML_from_file - Charger un fichier XML à partir d' un fichier
- Load_XML_from_str - Charger un fichier XML à partir d' une chaine
- Load_XSL_from_file - Charger la template XSLT à partir d' un fichier
- Load_XSL_from_str - Charger la template XSLT à partir d' une chaine
- Set_encoding - Définir l' encodage
- Add_XSL_parameter - Passer un parametre à la template XSLT
- Output - Affichage du résultat
- XSLTPROC_shell_transform - Transformation avec XSLTPROC en ligne de commande
- SABLOTRON_shell_transform - Transformation avec SABLOTRON en ligne de commande
- XALAN_shell_transform - Transformation avec XALAN en ligne de commande
Exemples
- Fichier XML de référence
- Exemple 1-1 Affichage simple (code PHP)
- Exemple 1-2 Affichage simple (feuille XSLT)
- Exemple 2-1 Ajout de quelques variables + TRI par date (code PHP)
- Exemple 2-2 Ajout de quelques variables + TRI par date (Feuille XSLT)
- Exemple 3-1 Formatage de la date - Affichage Jours,Mois en toutes lettres (code PHP)
- Exemple 3-2 Formatage de la date - Affichage Jours,Mois en toutes lettres (Feuille XSLT 1)
- Exemple 3-3 Formatage de la date - Affichage Jours,Mois en toutes lettres (Feuille XSLT 2)
- Exemple 4-1 Alternance des couleurs dans la liste (code PHP)
- Exemple 4-2 Alternance des couleurs dans la liste (feuille XSLT)
Exemple 3-2 Formatage de la date - Affichage Jours,Mois en toutes lettres (Feuille XSLT 1)
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="yes"
media-type="text/html" />
<!-- Inclusion de la template contenant les dates en toutes lettres -->
<xsl:include href="ex.XSLT.8.php.src"/>
<xsl:param name="limit"/>
<xsl:template match="/">
<xsl:variable name="url" select="root/url"/>
<xsl:variable name="language" select="root/language"/>
<h1>
<a href="{$url}" hreflang="{$language}">
<xsl:value-of select="root/title"/>
</a>
</h1>
<ul>
<xsl:for-each select="root/item[ position() <= $limit ]">
<xsl:sort select="@date" data-type="text" order="ascending"/>
<!-- Année -->
<xsl:variable name="annee" select="substring-before(@date, '-')"/>
<!-- variable temporaire -->
<xsl:variable name="temp" select="substring-after(@date, '-')"/>
<!-- Mois -->
<xsl:variable name="mois" select="substring-before($temp, '-')"/>
<!-- Jour -->
<xsl:variable name="jour" select="substring-after($temp, '-')"/>
<!-- Mois en toutes lettres -->
<xsl:variable name="mois-lettres" select="$lesmois[@m=$mois]/@nom"/>
<!--
Jour en toutes lettres
trouvé chez O'reilly
-->
<xsl:variable name="a" select="floor((14 - $mois) div 12)"/>
<xsl:variable name="y" select="$annee - $a"/>
<xsl:variable name="m" select="$mois + 12 * $a - 2"/>
<xsl:variable name="jour-lettres" select="$lesjours[@j=($jour + $y + floor($y div 4) - floor($y div 100)
+ floor($y div 400) + floor((31 * $m) div 12)) mod 7]/@nom"/>
<!-- Voila, on a tout, on recompose la chaine -->
<li>
<strong>
<xsl:value-of select="concat($jour-lettres,' ',$jour,' ',$mois-lettres,' ',$annee)"/>
</strong>
<xsl:text>:::</xsl:text>
<xsl:value-of select="text()"/>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="yes"
media-type="text/html" />
<!-- Inclusion de la template contenant les dates en toutes lettres -->
<xsl:include href="ex.XSLT.8.php.src"/>
<xsl:param name="limit"/>
<xsl:template match="/">
<xsl:variable name="url" select="root/url"/>
<xsl:variable name="language" select="root/language"/>
<h1>
<a href="{$url}" hreflang="{$language}">
<xsl:value-of select="root/title"/>
</a>
</h1>
<ul>
<xsl:for-each select="root/item[ position() <= $limit ]">
<xsl:sort select="@date" data-type="text" order="ascending"/>
<!-- Année -->
<xsl:variable name="annee" select="substring-before(@date, '-')"/>
<!-- variable temporaire -->
<xsl:variable name="temp" select="substring-after(@date, '-')"/>
<!-- Mois -->
<xsl:variable name="mois" select="substring-before($temp, '-')"/>
<!-- Jour -->
<xsl:variable name="jour" select="substring-after($temp, '-')"/>
<!-- Mois en toutes lettres -->
<xsl:variable name="mois-lettres" select="$lesmois[@m=$mois]/@nom"/>
<!--
Jour en toutes lettres
trouvé chez O'reilly
-->
<xsl:variable name="a" select="floor((14 - $mois) div 12)"/>
<xsl:variable name="y" select="$annee - $a"/>
<xsl:variable name="m" select="$mois + 12 * $a - 2"/>
<xsl:variable name="jour-lettres" select="$lesjours[@j=($jour + $y + floor($y div 4) - floor($y div 100)
+ floor($y div 400) + floor((31 * $m) div 12)) mod 7]/@nom"/>
<!-- Voila, on a tout, on recompose la chaine -->
<li>
<strong>
<xsl:value-of select="concat($jour-lettres,' ',$jour,' ',$mois-lettres,' ',$annee)"/>
</strong>
<xsl:text>:::</xsl:text>
<xsl:value-of select="text()"/>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>