[XSLT] xsl:if sur parm, order d'apres param
Bonjour tout le monde
J'ai un petit souci avec XSL, voici mon fichier XML
Code:
1 2 3 4 5 6 7 8 9
|
<repertoire>
<personne id="1">
<nom pays="Belgique" ville="Yvoir">Dupont</nom>
<prenom>Jean</prenom>
<age jour="22" mois="06" annee="1978">29</age>
</personne>
...
</repertoire> |
Les ... signifie qu'il y'a plusieurs node personne
j'utilise PHP pour afficher le résultat, jusque là pas de souci, j'envoi 2 paramètre à mon XSL via PHP
Code:
1 2 3 4 5 6 7
|
if(isset($_GET['orderby'])){ $orderby = $_GET['orderby']; }
else{ $orderby = 'nom'; }
$xslt->setParameter('', 'orderby', $orderby );
if(isset($_GET['sens'])){ $sens = $_GET['sens']; }
else{ $sens = 'ascending'; }
$xslt->setParameter('', 'sens', $sens ); |
et dans mon fichier XSL je voudrai donc effectuer un triage en fonction de ces 2 paramètre, pour les élément tel que nom,prenom,age pas de souci
Code:
1 2 3 4 5 6 7 8 9
|
<xsl:param name="orderby"/>
<xsl:param name="sens"/>
<xsl:template match="/">
<xsl:for-each select="repertoire/personne">
<xsl:sort select="*[name()=$orderby]" order="{$sens}"/>
etc...
</xsl:for-each>
</xsl:template> |
Mon problème est que pays,ville,jour,mois,annee sont des attribut et non des élément la logique voudrai donc que lorsque c'est pays/ville/jour/mois/annee il devrais faire
Code:
1 2 3 4 5 6 7 8 9
|
<xsl:param name="orderby"/>
<xsl:param name="sens"/>
<xsl:template match="/">
<xsl:for-each select="repertoire/personne">
<xsl:sort select="*@[name()=$orderby]" order="{$sens}"/>
etc...
</xsl:for-each>
</xsl:template> |
Mais je ne sais pas comment faire en sorte que si $orderby = nom ou prenom ou age alors il ne mette pas le @ et si $orderby = pays ou ville ou jour ou mois ou annee alors le @ ( pour spécifier attribut ) ce place
Je sais pas si c'est clair ce que je raconte, sinon hésite pas à me le dire et j'essayerai de mieux détailler.
d'avance merci de votre aide