Suivez les fils RSS
 
Auteur
yep
# 05 Jan 2012 - 14:58:30
Citer
22 Posts
Bonjour à tous,

Je n'arrive pas à obtenir une variable dépendant d'une autre variable.
J'ai tenté le code suivant pour obtenir la variable $maison égale à "bleue", grâce à ma variable $champ... sans succès.

Code XML
<champ>maison</champ>
<maison>bleue</maison>


Code XSL
<xsl:variable name="champ">
<xsl:value-of select="champ" />
</xsl:variable>
<xsl:variable name="maison">
<xsl:value-of select="$champ" />
</xsl:variable>


Auriez-vous une suggestion ?
Modifié par yep (23 Jan 2012 - 16:51)

^
jo_link_noir
# 07 Jan 2012 - 15:06:58
Citer
298 Posts
Salut,

Tu peux utiliser name() qui permet de récupéré le nom du nœud courant et qui entre crochet + condition permet de sélectionner les nœud avec un nom donné.

<xsl:variable name="champ" select="champ"/>
<xsl:variable name="maison" select="*[name()=$champ]"/>


Je suis curieux de savoir à quoi cela peux servir ^^.

doc jquery, doc javascript, doc php
(php.net/la_fonction_chercher)

msn 
^
rimousky
# 08 Jan 2012 - 15:41:42
Citer
La nuit porte conseil !
52 Posts
Bonjour yep

que veux tu faire exactement ? qu'entends-tu par une variable qui dépend d'une autre variable ? autrement-dit est que la valeur de "maison" dépend de celle de "champ" ?
d'après ce que tu expliques, ton xsl ne fait que créer la variable $champ qui prend la valeur de l'élément champ c.a.d " maison (fichier xml)
tu crées ensuite une variable $maison qui prend la valeur de la variable champ c.a.d "maison".

autrement dit maison = maison

si tu veux créer une extraction qui s'appelle maison bleue, il faut créer la séquence suivante :
<xsl:variable name="maisoncouleur">

<xsl:value-of select="champ"/><xsl:text> </xsl:text></xsl:value-of select="maison">

</xsl:variable>


mais tu peux aussi passer la couleur en attribut

<champ maison="bleue">maison</champ>

et dans la feuille de style XSL

<xsl:value-of select="champ"/><xsl:value-of select="champ/@maison"/>


Si tu souhaites connaitre la couleur de la maison à ce moment là il ne faut éditer que la valeur de l'attribut.

Mais est-ce bien cela ton problème ?
Modifié par rimousky (08 Jan 2012 - 15:46)

Cordialement
Rimousky

^
yep
# 09 Jan 2012 - 19:09:16
Citer
22 Posts
Merci à vous pour vos premiers retours.

En fait, le script me permet d'obtenir un formulaire en fonction d'un fichier de configuration XML.

Code XML
<form>
<usefieldset />
<uselegend />
<method>create</method>
<object>test</object>
<legend>
<create>Ajouter un enregistrement</create>
<update>Modifier un enregistrement</update>
<delete>Supprimer un enregistrement</delete>
</legend>
</form>


Mon objectif est d'obtenir, dans cet exemple, la valeur "form/legend/create" soit "Ajouter un enregistrement", obtenue grâce à la valeur définit dans la balise <method /> (= "create").

Si la valeur de <method /> devient "update", c'est automatiquement "form/legend/update" que doit prendre la valeur de ma seconde variable.
Modifié par yep (10 Jan 2012 - 10:00)

^
yep
# 10 Jan 2012 - 09:29:48
Citer
22 Posts
J'ai également tenté avec le code XSL suivant :

Code XSL
<xsl:variable name="method" select="form/method" />

<xsl:variable name="legend">
<xsl:attribute name="select">
form/legend/
<xsl:value-of select="$method" />
</xsl:attribute>
</xsl:variable>


mais sans succès. Idem pour

Code XSL
<xsl:variable name="method" select="form/method" />

<xsl:variable name="legend" select="form/legend/{$method}" />


Je sèche smile
Modifié par yep (10 Jan 2012 - 10:19)

^
rimousky
# 11 Jan 2012 - 22:03:26
Citer
La nuit porte conseil !
52 Posts
Autrement dit tu veux passer la valeur de l'élément <method> à une variable qui va imposer le choix du sous élément portant le nom de l'élément méthod.
Comme cela tu ne pourras pas y arriver par contre tu peux simplifier l'écriture du doc XML en introduisant des attributs pour l'élément <legende> par exemple

<legendeSelect>
<legende type="create">Ajouter....</legende>
<legende type="update">Modifier...</legende>
etc...
</legendeSelect>


Puis faire un test en fonction de la valeur de l'élément <method>.....passé en variable $method par exemple (première partie de ton xsl


soit : dans le fichier xsl

<xsl:if test="..../legend[@type=$method]">
<xsl:value-of select="."/>
</xsl:if>

Ou à l'aide de template en matchant sur les éléments <legende> dont le type a la valeur <method>

Cordialement
Rimousky

^
jo_link_noir
# 12 Jan 2012 - 14:39:35
Citer
298 Posts
Salut,

je passe en coup de vent, manque de temps smile

<xsl:variable name="method" select="form/method" />
<xsl:variable name="legend" select="form/legend/{$method}" />


la variable legend devrait être quasiment comme le premier exemple que je donnais mais avec un patch en plus
<xsl:variable name="legend" select="form/legend/*[name()=$method]" />



Mais comme dit rimousky tu peux passer par des if et faire des template ou les 2 langue
<xsl:template match="form" mode="update">
plop
</xsl:template>
<xsl:template match="form" mode="create">
plop2
</xsl:template>
<xsl:template match="form">
<xsl:choose>
<xsl:when test="method = 'create'">
<xsl:apply-templates select="." mode="create"/>
</xsl:when>
<xsl:when test="method = 'update'">
<xsl:apply-templates select="." mode="update"/>
</xsl:when>
</xsl:choose>
</xsl:template>

...
<xsl:apply-templates select="form"/>
...


La methode de l'attribut revient un peut au meme que chercher un nom de neud, mais est surement plus clair cligne

doc jquery, doc javascript, doc php
(php.net/la_fonction_chercher)

msn 
^
yep
# 23 Jan 2012 - 16:51:27
Citer
22 Posts
Ta solution *[name()=$method] est nickel, un grand merci.
Modifié par yep (23 Jan 2012 - 16:52)

^