Re: passer une variable javascript dans une instruction xsl

COUTHURES Alain <[email protected]> Thu, 12 Apr 2007 09:47:16 +0200
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
Bonjour,

Je n'arrive pas bien à comprendre où s'effectue la transformation XSLT 
que vous donnez : sur le client ou sur le serveur ? Avez-vous regardé le 
source de la page tel que donné par le navigateur ?

Le problème est que la fonction itemClic() s'exécute nécessairement sur 
le client et que la transformation la précède quoi qu'il en soit !

Je pense donc que l'instruction <xsl:value-of select="aide/etape[' +id 
+']/titre_etape"/> est évaluée une seule fois pour toute et retourne 
toujours la première étape, la chaîne '+id+' étant considérée comme une 
expression Xpath toujours juste !

Pour moi, la solution la plus simple pour vous consiste à générer par 
XSLT un tableau javascript que la fonction itemClic() parcourera à 
chaque appel.

Bien cordialement,

Alain COUTHURES
<agenceXML>
http://www.agenceXML.com

COILLOT, Lilian a écrit :
> Bonjour,
>  
>
> Je réalise une aide à intégrer dans un intranet. Cette aide doit être consultable avec et sans Flash Player, aussi j'ai choisi de créer un xml unique alimentant un fichier Flash et un xsl, afin de simplifier la maintenance. Tout se passe bien avec le Flash, mais j'ai un problème avec le xsl.
>
>  
>
> Mon objectif :
>
> Afficher un menu avec les différentes étapes, fonctionnant comme des boutons.
>
> Au clic sur l'une d'elle, récupérer son id, et afficher le contenu correspondant.
>
> Le tout toujours dans le même page (qui se recharge, bien sur).
>
>  
>
> Mes contraintes :
>
> Pas d'intégration possible dans un fichier php, aucune modification n'étant possible sur le serveur.
>
> Tout doit donc se passer côté client.
>
> Une seule fenêtre, donc pas de lien vers différentes pages spécifiques à chaque étape.
>
>  
>
> Mon problème :
>
> J'arrive à transmettre l'id de l'étape (@id) cliquée via une fonction javascript (itemClic).
>
> Mais dans cette même fonction, je voudrais récupérer le type de l'étape correspondante.
>
> Hors, l'instruction marche bien, mais ne prend pas en compte la variable : quelque soit l'étape cliquée, le titre est toujours celui du premier nœud.
>
> Extrait de l'instruction : ' Titre : <xsl:value-of select="aide/etape[' +id +']/titre_etape"/>'
>
>  
>
> Jusqu'à maintenant je ne travaillais le xml qu'avec Flash, aussi la solution que j'ai trouvée n'est sans doute pas la meilleure.
>
> S'il existe d'autre façon de transmettre une variable en restant côté client, je suis preneur !
>
>  
>
> Pour mieux comprendre, je vous joins ensuite les bouts essentiels du xsl et du xml, ainsi que l'affichage obtenu actuellement.
>
>  
>
> Je vous remercie pour vos conseils.
>
> Bonne journée !
>
> lilian
>
>  
>
>  
>
> Fichier xsl :
>
>  
>
> <script type="text/javascript">
>
>  
>
>             function itemClic(id) {
>
>                         document.write('Id : ' +id +' Titre : <xsl:value-of select="aide/etape[' +id +']/titre_etape"/>');
>
>             }           
>
> </script>
>
>  
>
> <xsl:for-each select="aide/etape">
>
>  
>
>             <a onClick="javascript:itemClic({@id})"><xsl:value-of select="titre_etape"/></a>
>
>       <br />
>
> </xsl:for-each>
>
>  
>
>  
>
> Arborescence simplifiée du fichier xml :
>
>  
>
> <aide>
>
>             <etape id="x">
>
>                         <titre_etape>
>
>                         <contenu>
>
>                         ...
>
>  
>
>  
>
> Affichage actuel, exemple avec l'étape 3 cliquée :
>
>  
>
> Id : 3 Titre : titre de l'étape 1
>
>  
>
>  
>
> --
>
>  
>
> Lilian Coillot
>
> [email protected]
>
>  
>
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de 
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant 
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=unsubscribe)
>
>
>