2017-05-03 1 views

Répondre

2

Toujours utiliser xsl:sequence.

xsl:sequence renvoie le résultat de son expression de sélection.

xsl:value-of prend le résultat de l'expression select et l'enveloppe dans un nœud de texte. Si le résultat déclaré de la fonction est (par exemple) xs: entier, le noeud de texte sera ensuite atomisé et converti en un entier xs:. Ainsi, par exemple

<xsl:function name="f:add" as="xs:integer"> 
    <xsl:param name="x" as="xs:integer"/> 
    <xsl:param name="y" as="xs:integer"/> 
    <xsl:value-of select="$x + $y"/> 
</xsl:function> 

effectuera une addition entière de x et y, convertira le résultat d'une chaîne, enveloppez cela dans un nœud de texte, atomiser le nœud de texte pour obtenir une valeur atomique typées, puis convertir le valeur atomique non typée à un nombre entier.

Si vous êtes chanceux, l'optimiseur détectera que tout cela est une perte d'effort et évitera les frais généraux, mais il est préférable de ne pas en dépendre.

Il existe d'autres cas où xsl: value-of ne fonctionne tout simplement pas, par exemple lorsque la fonction retourne un noeud.

+0

Merci Michael! – Rupesh