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.

[b]Code XML[/b]
<champ>maison</champ>
<maison>bleue</maison>


[b]Code XSL[/b]
<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)
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 ^^.
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)
Merci à vous pour vos premiers retours.

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

[b]Code XML[/b]
<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)
J'ai également tenté avec le code XSL suivant :

[b]Code XSL[/b]
<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

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

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


Je sèche Smiley smile
Modifié par yep (10 Jan 2012 - 10:19)
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>
Salut,

je passe en coup de vent, manque de temps Smiley 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 Smiley 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 Smiley cligne
Ta solution *[name()=$method] est nickel, un grand merci.
Modifié par yep (23 Jan 2012 - 16:52)