xsl: pour chaque compteur de boucle
Comment faire pour enregistrer les versions qui ont eu lieu dans une feuille de style xsl:for-each? (variables en XSL sont immuables)
Mon objectif est de trouver le nombre maximum d'enfants pour tout nœud à un niveau particulier.
Par exemple que je veuille l'impression qu'il n'y a pas plus de Réponse de 2 nœuds pour toute Question à ce sondage:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="testing.xsl"?>
<Survey>
<Question>
<Response text="Website" />
<Response text="Print Ad" />
</Question>
<Question>
<Response text="Yes" />
</Question>
</Survey>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
</head>
<body>
<xsl:for-each select="Survey">
The survey has <xsl:value-of select="count(child::Question)"/> questions.
<br />
<xsl:variable name="counter">0</xsl:variable>
<xsl:for-each select="Question">
<!-- TODO: increment the counter ??????? -->
</xsl:for-each>
No more than <xsl:value-of select="$counter"/> responses were returned for any question.
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
source d'informationauteur Robert Claypool | 2008-12-03
Vous devez vous connecter pour publier un commentaire.
On n'a pas "enregistrer les itérations qui ont eu lieu dans une feuille de style xsl:for-each" parce que XSLT est un langage fonctionnel et les variables sont immuables.
La transformation suivante trouve le voulait maximum:
Lorsqu'il est appliqué sur le document XML:
le résultat souhaité est obtenu:
2
Faire noter les éléments suivants: Le modèle nommé "
maximum
" appelle récursivement et met en œuvre la DVC (Diviser pour régner principe) pour réduire la récurrence de la pile de la profondeur. La liste des nœuds est divisé en deux, les maximums des deux listes sont calculées (de manière récursive) et le plus grand des deux est retourné.