L'impression de La Valeur D'Une Variable XSL
Quelqu'un peut-il me dire comment afficher une variable dans ma transformation XSL? Semble être une chose assez facile à faire, mais je n'arrive pas à le faire. Voici le code que j'ai:
<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version="1.0"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="ControlledListStructure">
<xsl:param name="xmlElem" />
<xsl:param name="dataName" />
<xsl:element name="{$xmlElem}">
1: <xsl:text>{$xmlElem}</xsl:text>.
2: {$xmlElem}.
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Si j'ai appelé ce modèle avec une valeur pour xmlElem de "Wibble" (une chaîne, pas un nœud), j'obtiens le résultat suivant:
<Wibble>
1: {$xmlElem}.
2: {$xmlElem}.
</Wibble>
Donc mon paramètre est à venir sur correctement, je ne peux pas accéder correctement. Quelqu'un peut me dire comment je peux obtenir $xmlElem à imprimer correctement de façon à ce que je vois:
<Wibble>
1: Wibble.
2: Wibble.
</Wibble>
Merci pour toute entrée.
- J'ai comblé certaines lacunes laissées par les réponses précédentes. Bonne question!
- Veuillez envisager de marquer Dimitre réponse comme "Accepté" considérant que sa réponse est très instructif et explique le "pourquoi" et pas seulement le "comment". Merci!!!!
Vous devez vous connecter pour publier un commentaire.
Toutes les réponses sont manquantes quelque chose d'important: lire plus loin:
En XSLT 1.0, il y a deux principales façons de produire le contenu d'un
<xsl:variable>
, selon qu'il contient une valeur scalaire (chaîne, nombre ou une valeur booléenne), ou a une valeur structurée -- un node-set (un ou plusieurs nœuds du document xml(s) ):<xsl:value-of select="$yourscalarVariableName"/>
L'utiliser pour produire une valeur scalaire. Produit en fait un nœud de texte, contenant cette valeur scalaire.<xsl:copy-of select="$yourStructuredVariableName"/>
L'utiliser pour produire une copie de tous les nœuds contenus dans la variable.Il est très important de savoir que si un
xsl:variable
contient une liste de nœuds et la<xsl:value-of ...>
instruction est utilisée, seule la chaîne de valeur du premier nœud sera produite. C'est l'un des plus fréquemment commis d'erreur et une FAQ.Il existe une troisième voie: si le
<xsl:variable>
doit être utilisé dans la production d'un attribut:L'expression XPath dans les accolades (appelé AVT -- attribut-valeur-modèle) est évaluée et le résultat est mis dans la valeur de l'attribut.
Dans XSLT 2.0, le
<xsl:value-of .../>
d'instruction , lorsqu'il s'exécute pas en mode de compatibilité, produit une liste de nœuds de texte, une pour chaque nœud contenues dans lexsl:variable
. Lors de l'exécuter en mode de compatibilité (a l'attributversion="1.0"
spécifié), le<xsl:value-of>
instruction se comporte de la même manière comme il le fait dans XSLT 1.0.Dans Xslt 2.0
<xsl:copy-of>
se comporte de la même manière que dans XSLT 1.0. Il est toutefois recommandé d'utiliser le nouveau<xsl:sequence>
instruction, parce que le premier produit d'une nouvelle copie de chaque nœud, tandis que<xsl:sequence>
ne produit pas de nouvelles copies de nœuds.Essayez ceci:
Vous pouvez utiliser:
L' {$xmlElem} syntaxe ne fonctionne que dans un attribut. Vous avez besoin de: