我正在自定义Google Search设备,该设备使用XSLT向用户展示结果。我们的设计要求在结果页面上随机包含多个图像之一。有没有办法在XSLT中使用随机性? (伪随机性适用于此应用程序。)
调用随机模板就行了,因为只能生成随机数和分支。
答案 0 :(得分:7)
您可以使用随机数的纯XSLT序列生成,也可以在[1 .. N]中生成数字的随机排列。
只需使用FXSL library(用纯XSLT编写)就可以了。
本文介绍了要使用的模板,并提供了完整的示例:
“Casting the Dice with FXSL: Random Number Generation Functions in XSLT”。
答案 1 :(得分:5)
根据您的平台,XSL允许注入像C#这样的用户代码。我不推荐这个。更好的是,我希望你的XSL接受一个参数以及生成XML有效负载或XSLT的任何内容,并且还可以生成随机数,设置参数。我完全使用这种方法完成了这个,除了数据来自Bing,而不是G。
答案 2 :(得分:4)
如果使用基于Java的XSLT引擎,则允许您调用Java库中的任何静态方法,例如java.lang.Math.random()。这是语法......
<?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>
答案 3 :(得分:2)
如果您不反对包含图书馆,可以使用许多图书馆,例如random:random-sequence from EXSLT
答案 4 :(得分:1)
如果您正在为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>