Un exemple très simple d'utilisation : vous souhaitez réaliser un simple tableau HTML et poser une simple class CSS une ligne sur deux, la fonction position() et xsl:attribute sont vos amis !
Admettons le flux XML suivant :
<?xml version="1.0" encoding="UTF-8"?> <root> <View> <wandiz> <staff> <id>1</id> <name>Laurent Bientz</name> </staff> <staff> <id>2</id> <name>Florian Collot</name> </staff> <staff> <id>3</id> <name>Kevin Lancien</name> </staff> <staff> <id>4</id> <name>Nicolas Nowak</name> </staff> <!-- ... --> </wandiz> </View> </root>
En XSL, la fonction position() renvoie l'indice (attention commence par 1) du noeud dans la collection ; xsl:attribute permet quand à lui de dynamiquement créer/surcharger un attribut HTML le précédant.
Il suffit donc de tester le modulo afin de surcharger la class du tr toutes les 2 lignes :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml"> <xsl:template name="showWandiz"> <table class="team"> <tr> <th>ID</th> <th>NAME</th> </tr> <xsl:for-each select="//View/wandiz/staff"> <tr class="light"> <xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">dark</xsl:attribute></xsl:if> <td><xsl:value-of select="id" /></td> <td><xsl:value-of select="name" /></td> </tr> </xsl> </table> </xsl:template> </xsl:stylesheet>
a few of the posts I realized it’s new to me. Regardless,
I’m definitely happy I came across it and I’ll be bookmarking it and checking back frequently!
Apporter votre contribution