XSLTを使用して結果をユーザーに表示するGoogle検索アプライアンスをカスタマイズしています。私たちのデザインでは、いくつかの画像の1つを結果ページにランダムに含める必要があります。XSLTでランダム性を使用する方法はありますか?(このアプリケーションでは、疑似ランダム性で問題ありません。)
乱数を生成し、それに基づいて分岐できるのと同様に、ランダムなテンプレートを呼び出すことは問題ありません。
プラットフォームに応じて、XSLではC#などのユーザーコードを挿入できます。これはお勧めしません。より良いのは、XSLにパラメーターを受け入れさせ、XMLペイロードまたはXSLTを生成しているものは何でも、パラメーターを設定して乱数を生成することもできます。データがGではなくBingからのものであることを除いて、私はこのアプローチを使用してこれを正確に実行しました。
Java ベースの XSLT エンジンを使用すると、java.lang.Math.random() などの Java ライブラリ内の任意の静的メソッドを呼び出すことができます。これが構文です...
<?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>
ライブラリを含めることを嫌がらない場合は、EXSLTのrandom:random-sequenceなどの多くの利用可能なものがあります
Microsoft でこれを行っている場合、XSLT の関数 ddwrt:Random を使用するとうまくいくことがわかりました。
以下を使用して乱数を作成します
<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>