Les Variables dans les expressions xpath
Est-il pas possible d'utiliser xsl:les variables dans les expressions xpath? Je suis sûr que ma variable a la valeur correcte. L'ai essayé à la fois comme une Chaîne de caractères et le nombre. La première mais la seconde on sélectionne tout le contenu des nœuds et pas seulement l'un avec l'indice de 4.
<xsl:apply-templates select="data/contents[4]/content" >
<xsl:apply-templates select="data/contents[$myVariable]/content" >
modifier
<xsl:variable name="dayOfWeekIndex">
<xsl:choose>
<xsl:when test="lower-case($dayOfWeek) = 'monday'">
<xsl:value-of select="number(1)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'tuesday'">
<xsl:value-of select="number(2)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'wednesday'">
<xsl:value-of select="number(3)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'thursday'">
<xsl:value-of select="number(4)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'friday'">
<xsl:value-of select="number(5)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'saturday'">
<xsl:value-of select="number(6)" />
</xsl:when>
<xsl:when test="lower-case($dayOfWeek) = 'sunday'">
<xsl:value-of select="number(7)" />
</xsl:when>
</xsl:choose>
</xsl:variable>
- Vous pouvez être intéressé de voir un XPath one-liner qui fait ce que l'25 lignes ci-dessus ne.
Vous devez vous connecter pour publier un commentaire.
Un
<xsl:variable>
le contenu, mais pas deas
attribut sera de définir la variable "temporaire de l'arbre", n'est pas un nombre, donc un prédicat[$dayOfweekIndex]
est traité comme un prédicat booléen plutôt qu'une restriction sur les nœuds'position()
. Vous devez ajouteras="xs:integer"
à laxsl:variable
tag force de la variable d'avoir le bon type.Vous pouvez également utiliser un
select
au lieu de cela, avec l'if
construire dans XPath 2.0:xsl:sequence
au lieu dexsl:value-of
à l'intérieur de laxsl:variable
ne change pas le type de l'xsl:variable
, tant qu'il est mis en place comme<xsl:variable name="dayOfWeekIndex">..</xsl:variable>
avec les non-vide de contenu, il est un arbre temporaire (voir la section w3.org/TR/xslt20/#temporary-trees), si vous avez besoin d'utiliseras="xs:integer"
ou vous avez besoin d'utiliser leselect
attribut avec une expression XPath retour d'unxs:integer
pour être en mesure d'utiliser la variable dans une position de prédicat.Il importe comment vous définissez le paramètre ou variable, évidemment, par exemple, avec
il devrait fonctionner (c'est à dire le processus de la quatrième
contents
), avecil ne fonctionne pas comme l'expression de prédicat n'est pas de type
xs:integer
, c'est un non vide séquence de nœuds.Comme d'autres l'ont remarqué, en précisant le type d'une variable qui compte vraiment dans XSLT 2.0.
En plus de cela, cette transformation montre comment utiliser une expression XPath one-liner pour produire le résultat voulu:
Lorsque cette transformation s'applique à tout document XML (non utilisé), le voulait, résultat correct est produit:
Lors de cette transformation
s'exécute sur code XML ci-dessous
obtenir la sortie