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] XPath et accolades


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut [XSLT] XPath et accolades
    Bonjour,

    Pour afficher le contenu d'une discussion au format xml avec xslt, je tente d'accèder avec XPath à un élément selon la valeur de son attribut, bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="replique">
    	<li><xsl:apply-templates select="/discussion/contexte/destinataire[@destid='{@expid}']/pseudo" /> : <xsl:apply-templates /></li>
    </xsl:template>
    qui s'applique au code 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
    18
    19
    <discussion>
    	<contexte>
    		<destinataire destid="0">
    			<pseudo>Test</pseudo>
    		</destinataire>
    		<destinataire destid="1">
    			<pseudo>Gus</pseudo>
    		</destinataire>
    	</contexte>
    	<replique expid="1">
    		Salut !
    	</replique>
    	<replique expid="0">
    		Salut, ça va ?
    	</replique>
    	<replique expid="1">
    		Yop, et toi ?
    	</replique>
    </discussion>
    Pour avoir finalement dans le navigateur :
    - Gus : Salut !
    - Test : Salut, ça va ?
    - Gus : Yop, et toi ?

    Pour le moment, il me semble que [@destid='{@expid}'] pose problème (pas d'erreur, mais le pseudo n'est pas affiché, donc je suppose que le chemin XPath n'est pas valide), alors que si je remplate {@expid} par une id valide (genre 0 ou 1 ici), ça me met le même pseudo partout (donc c'est bien cette partie qui dérange). Mais je ne vois pas comment faire autrement pour que chaque réplique puisse afficher le pseudo correspondant à son id.

    Ma syntaxe n'est pas valide ou c'est une erreur de sens ?

    Merci d'avace !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    Il suffisait en fait de passer par une variable ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name="expid" select="@expid" />
    <xsl:apply-templates select="/discussion/contexte/destinataire[@destid=$expid]/pseudo" />
    ... et dire que j'avais déjà essayé ça hier soir, mais avec une mauvaise syntaxe

  3. #3
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    Les accolades sont interdites dans les expressions XPath, on ne les trouve que pour encadrer une expression XPath dans une valeur d'attribut d'un élément non XSLT.

    Pour faire une "jointure" entre une réplique et un destinataire, pas besoin de variable, il faut juste utiliser la fonction XSLT current() qui désigne l'élément courant (ici une réplique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="/discussion/contexte/destinataire[@destid=current()/@expid]/pseudo" />
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

Discussions similaires

  1. [xslt] [xpath] reformater un document xml
    Par deague dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 08/02/2006, 20h36
  2. [XSLT][XPATH] Conseil
    Par totoen dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/12/2005, 13h56
  3. xslt+xpath
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/10/2005, 15h08
  4. [XSLT+XPath] Échapper les accolades XPath
    Par Floyd dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/09/2005, 23h04

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