12

我正在定制一个 Google Search Appliance,它使用 XSLT 向用户呈现结果。我们的设计要求在结果页面上随机包含几个图像之一。有没有办法在 XSLT 中使用随机性?(伪随机性对于这个应用程序来说很好。)

调用随机模板就可以了,就像能够生成一个随机数和基于它的分支一样。

4

5 回答 5

9

您可以生成纯 XSLT 随机数序列,也可以生成 [1 .. N] 中数字的随机排列。

只需为此使用FXSL 库(用纯 XSLT 编写)。

本文解释了要使用的模板并具有完整的示例:

用 FXSL 掷骰子:XSLT 中的随机数生成函数”。

于 2010-03-02T02:12:43.970 回答
5

根据您的平台,XSL 允许注入 C# 等用户代码。我不推荐这个。更好的是,我会让您的 XSL 接受一个参数以及生成 XML 有效负载或 XSLT 的任何内容,并且还可以生成随机数,设置参数。除了数据来自 Bing 而不是 G 之外,我已经完全使用这种方法完成了这项工作。

于 2010-03-01T21:22:06.200 回答
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>
于 2010-03-01T21:58:43.203 回答
2

如果您不反对包含库,则有许多可用的库,例如来自 EXSLT 的 random:random-sequence

于 2010-03-01T21:22:24.853 回答
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>
于 2014-05-28T18:59:04.810 回答