Bonjour tout le monde
j'ai un petit souci avec le xsl:if sur un paramètre, à moins qu'une autre solution existe
Tout d'abord voici mon fichier XML
et voilà le xsl ou je bloque
et mon problème est le suivant.
pour l'instant j'ai deux paramètre 'orderby' et 'sens' pour ce qui est du triage par 'nom' | 'prenom' | 'age', pas de souci ca fonctionne parfaitement, mais 'pays' | 'ville' | 'jour' | 'mois' | 'annee' sont des attribut et donc mon 'sort' n'est plus correct et je voudrais faire quelques chose du style
j'obtient une dizaine de message d'erreur me disant que les { } dans le 'select' ne sont pas autorisé alors que dans order il sont autoriser, j'ai lu plusieur chose qui disent d'utiliser 'choose' | 'when' | 'other' mais c'est toujour les même message d'erreur, et avec xsl:if il me dit que $orderby n'est pas valide, j'ai aussi essayer de mettre les { } dans le if pour encadré le paramètre mais j'ai le même message me diant que { } ne sont pas correct
Pourriez-vous m'aider à me mettre sur la bonne voix ?
d'avance merci de votre aide
j'ai un petit souci avec le xsl:if sur un paramètre, à moins qu'une autre solution existe
Tout d'abord voici mon fichier XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE repertoire SYSTEM "repertoire.dtd">
<?xml-stylesheet type="text/xsl" href="style.xslt"?>
<repertoire>
<personne id="1">
<nom pays="Belgique" ville="Yvoir">Dupont</nom>
<prenom>Jean</prenom>
<age jour="22" mois="06" annee="1978">29</age>
</personne>
etc...
</repertoire>
et voilà le xsl ou je bloque
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="ISO-8859-1"
indent="yes" />
<xsl:param name="orderby"/>
<xsl:param name="sens"/>
<xsl:template match="/">
<xsl:for-each select="repertoire/personne">
<xsl:sort select="*[name()=$orderby]" order="{$sens}"/>
<tr class="content">
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="class">content2</xsl:attribute>
</xsl:if>
<td><xsl:value-of select="nom"/></td>
<td><xsl:value-of select="prenom"/></td>
<td><xsl:value-of select="age"/></td>
<td><xsl:value-of select="nom/@pays"/></td>
<td><xsl:value-of select="nom/@ville"/></td>
<td><xsl:value-of select="age/@jour"/></td>
<td><xsl:value-of select="age/@mois"/></td>
<td><xsl:value-of select="age/@annee"/></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
et mon problème est le suivant.
pour l'instant j'ai deux paramètre 'orderby' et 'sens' pour ce qui est du triage par 'nom' | 'prenom' | 'age', pas de souci ca fonctionne parfaitement, mais 'pays' | 'ville' | 'jour' | 'mois' | 'annee' sont des attribut et donc mon 'sort' n'est plus correct et je voudrais faire quelques chose du style
<xsl:if test="$orderby = 'pays' or $orderby = 'ville'">
<xsl:sort select="nom/@{$orderby}" order="{$sens}"/>
</xsl:if>
<xsl:if test="$orderby = 'jour' or $orderby = 'mois' or $orderby = 'annee'">
<xsl:sort select="age/@{$orderby}" order="{$sens}"/>
</xsl:if>
<xsl:if test="$orderby ='nom' or $orderby = 'prenom' or $orderby = 'age'">
<xsl:sort select="*[name()=$orderby]" order="{$sens}"/>
</xsl:if>
[code]
mais dés que je change la ligne
[code]
<xsl:sort select="*[name()=$orderby]" order="{$sens}"/>
j'obtient une dizaine de message d'erreur me disant que les { } dans le 'select' ne sont pas autorisé alors que dans order il sont autoriser, j'ai lu plusieur chose qui disent d'utiliser 'choose' | 'when' | 'other' mais c'est toujour les même message d'erreur, et avec xsl:if il me dit que $orderby n'est pas valide, j'ai aussi essayer de mettre les { } dans le if pour encadré le paramètre mais j'ai le même message me diant que { } ne sont pas correct
Pourriez-vous m'aider à me mettre sur la bonne voix ?
d'avance merci de votre aide