IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] donner le paramètre "." dans un sort


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut [XSLT] donner le paramètre "." dans un sort
    Bonjour,
    J'ai essayé de tourner le problème dans tous les sens et je ne comprends pas ce qui ne va pas.
    Puisqu'un exemple vaut mieux qu'un long discours, voici les fichiers simplifiés qui représentent mon problème :
    Le XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <?xml:stylesheet type="text/xsl" href="test.xsl"?>
    <personnes>
    	<personne>zzzzz
    		<nom>machin</nom>
    		<prenom>julien</prenom>
    	</personne>
    	<personne>yyyyy
    		<nom>tachin</nom>
    		<prenom>aurelien</prenom>
    	</personne>
    	<personne>xxxxx
    		<nom>bachin</nom>
    		<prenom>patrick</prenom>
    	</personne>
    </personnes>
    Le problème est que j'aimerais trier les personnes par nom, prénom, ou par le texte qui est dans l'élément personne.
    J'ai donc un xsl dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?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="html" encoding="iso-8859-1"/>
     
    	<xsl:template name="monTemplate">
    		<xsl:param name="sortBy" />
     
    		trié par : <xsl:value-of select="$sortBy" /><br />
     
    		<xsl:for-each select="personne">
    			<xsl:sort select="*[name() = $sortBy]" order="ascending"/>
    			<xsl:value-of select="nom"/> <xsl:value-of select="prenom"/><br />
    		</xsl:for-each>
    	</xsl:template>
     
    	<xsl:template match="personnes">
    		<xsl:call-template name="monTemplate">
    			<xsl:with-param name="sortBy">nom</xsl:with-param>
    		</xsl:call-template>
    	</xsl:template>
     
    </xsl:stylesheet>
    Tout va bien pour trier par nom ou par prénom, mais dés que je je veux trier par cette foutue valeur dans personne, je n'y arrive pas.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		<xsl:call-template name="monTemplate">
    			<xsl:with-param name="sortBy">.</xsl:with-param>
    		</xsl:call-template>
    Mais ça ne joue pas.

    Comment faire ?

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    c'est normal, . est une expression xpath et une expression xpath ne peut être passé en paramètre seul son résultat peut l'être (ce qui n'est pas le cas ici).

    le plus simple est de faire deux boucles for-each, avec un et un choose en testant la valeur du sortby

    nb: de plus tui t'es trompé je pense . Si tu utilise . c'est la valeur de personne + nom + prenom que tu obtiens.
    Si tu ne veux que la valeur de personne c'est text()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <xsl:choose>
    <xsl:when test="$sortBy!='.' ">
     
    <xsl:for-each select="personne">
    			<xsl:sort select="*[name() = $sortBy]" order="ascending"/>
    			<xsl:value-of select="nom"/> <xsl:value-of select="prenom"/><br />
    		</xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
    <xsl:for-each select="personne">
    			<xsl:sort select="text()" order="ascending"/>
    			<xsl:value-of select="nom"/> <xsl:value-of select="prenom"/><br />
    		</xsl:for-each>
     
    </xsl:otherwise>
    </xsl:choose>

  3. #3
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Super !
    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2008, 00h23
  2. Réponses: 10
    Dernier message: 02/02/2007, 17h00
  3. Afficher quote/guillemet dans un input
    Par EggY14 dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2006, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo