Articles au hasard dans XSLT
Question
Je personnalisant un appareil de recherche Google, qui utilise XSLT pour présenter les résultats à l'utilisateur. Nos appels de conception pour l'une de plusieurs images à inclure au hasard sur la page de résultats. Y at-il un moyen d'utiliser l'aléatoire dans XSLT? (Pseudo-aléatoire est très bien pour cette application.)
L'appel des modèles aléatoires serait bien, comme le ferait tout simplement être en mesure de générer un nombre aléatoire et la branche sur cette base.
La solution
En fonction de votre plate-forme permet de XSL Injecter de code utilisateur comme C #. Je ne recommande pas. Mieux, j'aurais votre accepte un paramètre XSL et tout ce que génère votre charge XML ou XSLT et peut également générer le nombre aléatoire, définissant le paramètre. Je l'ai fait en utilisant exactement cette approche, sauf les données proviennent de Bing, pas G.
Autres conseils
Vous pouvez générer des séquences XSLT pures de nombres aléatoires et aussi des permutations aléatoires des nombres dans [1 .. N].
Il suffit d'utiliser le bibliothèque FXSL (écrit en XSLT pur) pour cela.
Cet article explique les modèles à utiliser et a des exemples complets:
" Castings les dés avec FXSL. génération de nombres aléatoires Fonctions XSLT »
Si vous utilisez un moteur XSLT basé sur Java, cela vous permettra de faire des appels à une méthode statique dans les bibliothèques Java, telles que java.lang.Math.random (). Voici la syntaxe ...
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="java.lang.Math"
version='1.1'>
<xsl:template match="/">
<xsl:variable name="myRandom" select="math:random()"/>
<xsl:value-of select="$myRandom"/>
</xsl:template>
</xsl:stylesheet>
Si vous n'êtes pas opposé à y compris les bibliothèques, il y a beaucoup de disponibles tels que
Si vous faites cela pour quoi que ce soit Microsoft, je trouve que l'utilisation de la fonction de XSLT de DDWRT:. Œuvres aléatoires J'utilise les éléments suivants pour créer le nombre aléatoire et le suivant pour présenter <xsl:variable name="RowCount" select="count($Rows)" />
<xsl:variable name="RandomNumber" select="ddwrt:Random(1, $RowCount)" />
<xsl:for-each select="$Rows[position() = $RandomNumber]">
<xsl:value-of select="@Title" /></xsl:for-each>