Considérons le modèle XSLT 2.0 suivant
<xsl:template match="/">
<xsl:variable name="var1">
<elem>1</elem>
<elem>2</elem>
<elem>3</elem>
</xsl:variable>
<xsl:text>var1 has </xsl:text>
<xsl:value-of select="count($var1)"/>
<xsl:text>elements.
</xsl:text>
<xsl:variable name="var2" select="$var1/elem[position() > 1]"/>
<xsl:text>var2 has </xsl:text>
<xsl:value-of select="count($var2)"/>
<xsl:text>elements.
</xsl:text>
</xsl:template>
La sortie de ce modèle est
var1 has 1 elements
var2 has 2 elements
La première ligne produit 1 (et non pas, comme je l'avais d'abord prévu, 3) car var1
est un fragment de document qui contient le <elem>
en tant qu'enfants. J'en viens maintenant à mes questions :
Comment puis-je créer une variable qui ne contient pas de fragment de document ? Je pourrais le faire comme je l'ai fait avec var2
en omettant seulement le prédicat. Mais peut-être y a-t-il un moyen sans utiliser une deuxième variable. Ou, comme alternative : Comment puis-je conserver le fragment de document dans une variable tout en filtrant certains éléments ?
Informations générales : Je vais utiliser le contenu de la variable dans une fonction récursive qui vérifie le premier élément de la variable var1
pour certains critères. Si les critères sont remplis ou si la liste d'éléments est vide, elle renvoie une valeur. Sinon, elle s'appelle elle-même avec le premier élément de la liste de var1
supprimé (comme je le fais dans var2
). Lorsque vous utilisez var1
comme paramètre qui contient un fragment de document, les expressions XPath de mon modèle ne correspondront pas.