je le xsl stylesheet suivant:Compte le nombre d'éléments retournés par <call-template>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="elements">
<xsl:call-template name="get-some-nodes"/>
</xsl:variable>
<root>
<values>
<xsl:copy-of select="$elements"/>
</values>
<count>
<xsl:value-of select="count($elements)"/>
</count>
</root>
</xsl:template>
<xsl:template name="get-some-nodes">
<node>1</node>
<node>2</node>
<node>3</node>
</xsl:template>
</xsl:stylesheet>
(Il ne devrait pas importer ce que xml vous l'appliquez à, il génère ses propres données).
Le résultat de cette de cette (en utilisant xsltproc) est:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.w3.org/1999/xhtml" xmlns:set="http://exslt.org/sets">
<values>
<node>1</node>
<node>2</node>
<node>3</node>
</values>
<count>1</count>
</root>
Étant donné que le modèle appelé renvoie trois noeuds, je me attendais « count (éléments $) » pour être 3, mais il est un. Je soupçonnais peut-être que les résultats étaient enveloppés dans une sorte de nœud racine, mais toute tentative de faire count ($ elements/*) ou similaire échouait, car $ elements est un fragment d'arbre de résultat, et non un ensemble de nœuds.
Je n'ai pas accès à l'un des goodies de exslt ou xslt2.0, il existe sûrement un moyen d'obtenir le nombre de nœuds stockés dans une variable?
Je serais également heureux de compter les nœuds renvoyés par le modèle d'appel sans utiliser de variable intermédiaire, mais je ne vois pas comment cela serait possible.
Bonne question, +1. Voir ma réponse pour une explication détaillée et des solutions. –