Salut !
Titre un peu bordelique, pas clair, mais le titre est pas suffisant pour expliquer ce que je souhaite réaliser Smiley langue

A la base j'ai un fichier XML contenant diverses choses, ça c'est okay, je fais appel à une feuille XSL pour le transformer en document HTML, ça c'est okay, je fais la transformation qui va bien, en gros je fais structure XML -> liste de définition, mais peu importe, donc jusque là tout va bien.
Mon problème arrive lorsque je veux indiquer une valeur d'attribut à mon <dt> ainsi créé.

J'ai donc ça :

<?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" version="1.0" encoding="iso-8859-1" indent="yes" />
    <xsl:template match="/">
    
    <dl id="glossaire">
    	<xsl:for-each select="glossary/term">
    	<!-- <dt id="<xsl:value-of select="label" />"><xsl:value-of select="label" /></dt> -->
    	<dt><xsl:value-of select="label" /></dt>
    	<dd><xsl:value-of select="description" /></dd>
	    </xsl:for-each>
    </dl>
    </xsl:template>
</xsl:stylesheet>


J'ai mis en commentaire en gros ce qu'il me faudrait, c'est à dire passer en valeur d'attribut, le contenu de la balise <label> de mon fichier XML source.
Et aussi, je sais pas si c'est possible, certainement que oui, la passer en minuscule, parcequ'à la base, la casse est variable.
Donc, en gros, toLowerCase() Smiley langue

Si vous avez une ressource a me donner ou une bout de solution...

merci Smiley cligne
@+
Modifié par Olivier (14 May 2005 - 12:55)
Heu j'ai pas trop compris.

Si tu veux juste récupérer la valeur de l'attribut, tu peux le sélectionner avec xpath:

@value

ou

attribute::value

Si tu es dans le bon noeud contexte

EDIT :

non au fait j'ai relu j'ai mieux compris. Si tu veux créer l'attribut tu dois faire comme ceci :

<dt id="{expression xpath}"></dt>

et pour passer en minuscule :

translate("ma chaine","ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")

(c'est une fonction xpath)
Modifié par TriadPtale (14 May 2005 - 12:37)
Salut,

De memoire il faut utilise l'element attribut comme ci dessous:
<dt>
    <xsl:attribute name="id">
        <xsl:value-of select="label" />
    </xsl:attribute>
    <xsl:value-of select="label" />
</dt>

voir XSL Transformations (XSLT)

Ca devrait fonctionner Smiley cligne

FRed
Modifié par FrenchFred (14 May 2005 - 12:44)
Impec Fred, ça fonctionne parfaitement Smiley cligne

Reste à passer l'attribut en minuscule, je test avec ce qu'a donné TriadPtale.

<edit>J'ai pas dû capter comment marchait la fonction de TriadPtale, parceque ça fait quedal Smiley ohwell

Mais en fait, je fais pas du tout de XPath là, c'est juste une feuille XSL</edit>
Modifié par Olivier (14 May 2005 - 12:48)
Ahh nan, en fait c'est bon, j'ai réussi Smiley smile

Donc, le code final :

<?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" version="1.0" encoding="iso-8859-1" indent="yes" />
    <xsl:template match="/">
    
    <dl id="glossaire">
    	<xsl:for-each select="glossary/term">
    	<dt><xsl:attribute name="id">
				<xsl:variable name="majuscules">ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ</xsl:variable>
				<xsl:variable name="minuscules">abcdefghijklmnopqrstuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ</xsl:variable>
				<xsl:value-of select="translate(label, $majuscules, $minuscules)"/>
			</xsl:attribute>
			<xsl:value-of select="label" /></dt>
    	<dd><xsl:value-of select="description" /></dd>
	    </xsl:for-each>
    </dl>
    </xsl:template>
</xsl:stylesheet>


Merci à vous Smiley cligne
Modifié par Olivier (14 May 2005 - 12:55)
Slt,

en fait quand tu fais des transformations Xslt, tu utilises forcément XPath (c'est grâce à ce language que tu désigne les noeuds que tu veux traiter).

Pour passer le tout en minuscule, tu fais un truc du genre :

<dt>
<xsl:attribute name="id">
<xsl:value-of select="translate(label,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')" />
</xsl:attribute>
<xsl:value-of select="label" />
</dt>


Ca devrait fonctionner.

++

EDIT : trop lent Smiley rolleyes
Modifié par SirWam (14 May 2005 - 12:56)
Le code de fred peut être abrégé en

<dt id="{label}>
<xsl:value-of select="label" />
</dt>


puisqu'on est dans un truc "litéral".

Ce code-ci marche parfaitement chez moi
<dt id="{translate(label,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')}"><xsl:value-of select="label"/></dt>


EDIT : grillé aussi Smiley langue

Enfin ce qu'il faut retenir c'est que quand tu es dans une valeur litérale(écrite directement dans la feuille de style) (en autre) tu peux simplifier la création d'attribut en faisant attribut="{xpath}" . Au fait les {} prennent la place d'un <value-of select="xpath"/>

:)
Modifié par TriadPtale (14 May 2005 - 13:01)
Wé, ça fonctionne ton truc TriadPtale, impec Smiley smile ça raccourci bien le code !

Par contre, je comprend pas ce que tu entends par "valeur litérale" Smiley ohwell
<?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" version="1.0" encoding="iso-8859-1" indent="yes" />
<xsl:template match="/">

<dl id="glossaire">
<xsl:for-each select="glossary/term">
<!-- <dt id="<xsl:value-of select="label" />"><xsl:value-of select="label" /></dt> -->
<dt><xsl:value-of select="label" /></dt>
<dd><xsl:value-of select="description" /></dd>
</xsl:for-each>
</dl>
</xsl:template>
</xsl:stylesheet>


<dl id="glossaire"> par exemple est "une valeur litérale" enfin c'est comme ça que ça s'apelle dans la terminologie xslt
ça a très peu d'importance mais le raccourci ne fonctionne que dans certains cas (notamment les valeurs litarales justement) . Je ne me souviens pas plus en détail Smiley langue
Wé mais qu'est ce qui définit une valeur comme litérale ?? Smiley langue

Quelles sont ses spécificités ? !

Enfin, c'est pas super important, mais vu que tu m'en as parlé, je voulais savoir de quoi tu parlais.

(t'avais qu'à te taire Smiley murf lol ^^)
Je cite ce bouquin:

a écrit :
Si un élément d'un corps de modèle n'est ni une instruction xsl, ni un élément d'extension, le processuer xslt doit alors le traiter comme un élément résultat litéral. Cela signifie qu'un élément doit être traité complètement et copié dans l'arbre résultat.
[...]
Les éléments résultats littéraux peuvent eux memes avoir un contenu, qui est alors traité comme un autre copris de modèle et analysé par le processeur xslt.


Pour ce qui est de l'emploi du raccourci :

On ne peux employer les "modèles d'attributs" (le "raccourci") qu'aux endroits suivants:
- éléments résultats littéraux
- élements d'extensions
- xsl: attribute, element, number, processing instruction, sort

Tu disais "je n'utilise pas xpath".

Au fait xpath s'emploie de façon tout à fait implicite dans les selects, les valeurs etc.

Seulement xslt défini un sous ensemble d'xpath : les motifs de concordances.

Quand tu dis "select="node"" , c'est un motif de condordance (c'est aussi une expression xpath toute simple).

Seulement les motifs de concordance sont nettement moins "puissant" que xpath : il n'y a que deux axes possible, pas de fonction, prédicats moins étendus...

Ceci dit, je ne sais pas pourquoi on fait une distinction entre les deux. Peut être que certains vieux processeurs xslt ne supportaient que les motifs de concordance et pas les expressions xpath complètes.

Voilou Smiley biggrin