Comment calculer le nombre de Nœuds dans XSLT?
J'ai maintenant est venu à la dernière étape de ma feuille de style XSL, qui a besoin de moi à la sortie d'un nombre représentant le nombre total de nœuds ajoutés. En fait, il ne semble pas être si simple pour moi:
Tout d'abord, je ne suis pas compter les nœuds à partir de l'original du document xml, je vais compter certains noeuds du XML résultant(l'initiale du document xml peut être vide).
Deuxièmement, je ne suis pas de comptage de tous les nœuds.
Par exemple, voici un morceau de mon code XSLT:
<xsl:template name="Loop2000A">
<Loop2000A>
<HL>
<HL01>
<xsl:value-of select="'1'"/>
</HL01>
<HL03>
<xsl:value-of select="'20'"/>
</HL03>
</HL>
<xsl:if test="$recbat//provider_taxonomy_qual !='' ">
<PRV>
<PRV01>
<xsl:value-of select="'BI'"/>
</PRV01>
<PRV02>
<xsl:value-of select="$recbat//provider_taxonomy_qual"/>
</PRV02>
<PRV03>
<xsl:value-of select="$recbat//provider_taxonomy"/>
</PRV03>
</PRV>
</xsl:if>
<xsl:call-template name="Loop2010AA"/>
Donc pour ce code, et sont appelés segments, et ceux de dollars recbat etc. sont sources de données. Donc, ce que je veux vraiment est le nombre de ces segments, et il peut à travers les différents modèles(comme "Loop2010AA" modèle ci-dessus, qui est un autre modèle), et ces segments peuvent avoir des boucles, de sorte qu'ils peuvent être créés à 3 fois consécutivement, ce qui à notre compteur doit incrémenter 3 en conséquence, ou peut-être l'instruction "if" ne parvient pas, donc pas de segment est créé, puis le compteur devrait rester la même.
Je ne suis pas sûr de la bonne façon de le mettre en œuvre, puisque la plupart du tutoriel j'ai googlé sont sur le décompte des nœuds dans l'original des documents XML. Une idée que j'ai maintenant est d'utiliser le paramètre de passage, mais je n'ai aucune idée de comment faire ce paramètre global?
Sinon, je pense à un moyen plus direct de le faire. Au lieu d'utiliser une variable de compteur, est-il possible que je peux générer la sortie xml du document, puis-je compter les noeuds que je veux dans ce xml, puis générer la VRAIE sortie avec le nombre.
scan
modèle. Sans feuille de style, je ne peux que suggérer deux phases de transformation: sortie le tout dans une variable, puis compter les noeuds.En fait, j'ai toute ma feuille de style dans la place, et ils sont enchaînés par l'aide ("appel-template"). Si l'aide est je regarde dans un modèle d'exploration?
Bonne question, +1. Voir ma réponse pour une solution complète. 🙂
OriginalL'auteur Kevin | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Voici une manière générale, pour traiter le résultat d'une transformation, y compris le comptage de ses nœuds:
lorsque cette transformation est appliquée sur le document XML suivant:
le résultat correct est produit:
En XSLT 1.0 (seulement) l'utilisation de la
xxx:node-set()
fonction d'extension est généralement nécessaire en multi-passes de traitement. Il n'y a pas une telle exigence dans XSLT 2.0, qui a éliminé l'infâme RTF "type de données".moyens variable, "rtf" est l'infâme type RTF (Result Tree Fragment) et c'est le type de la variable. "Rapidair1" signifie que la variable contient le résultat de l'étape 1 de la transformation.
OriginalL'auteur Dimitre Novatchev