我正在定制一个 Google Search Appliance,它使用 XSLT 向用户呈现结果。我们的设计要求在结果页面上随机包含几个图像之一。有没有办法在 XSLT 中使用随机性?(伪随机性对于这个应用程序来说很好。)
调用随机模板就可以了,就像能够生成一个随机数和基于它的分支一样。
根据您的平台,XSL 允许注入 C# 等用户代码。我不推荐这个。更好的是,我会让您的 XSL 接受一个参数以及生成 XML 有效负载或 XSLT 的任何内容,并且还可以生成随机数,设置参数。除了数据来自 Bing 而不是 G 之外,我已经完全使用这种方法完成了这项工作。
如果您使用基于 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>
如果您不反对包含库,则有许多可用的库,例如来自 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>