2010-03-01 64 views
11

我正在自定義一個Google搜索設備,該設備使用XSLT向用戶呈現結果。我們的設計要求將幾個圖像之一隨機包含在結果頁面上。有沒有在XSLT中使用隨機性的方法? (僞隨機性對於這個應用程序來說是很好的。)XSLT中的隨機項目

調用隨機模板會很好,就像剛纔能夠生成一個隨機數和基於此的分支一樣。

+3

由於Search Appliance似乎只熱衷於XSLT 1.0以下,我決定去與使用長度的搜索字符串來確定顯示哪個圖像。因此,我正在使用類似這樣的方式來獲得0-3的數字範圍: 2010-03-01 22:17:03

+0

+1,好和實用在這種情況下進行變通。在我讀這本書之前,我會寫一些類似的答案。 – Tomalak 2010-03-02 13:26:57

回答

5

根據您的平臺,XSL允許注入像C#這樣的用戶代碼。我不推薦這個。更好的是,我會讓你的XSL接受一個參數,並且生成你的XML負載或XSLT,並且還可以生成隨機數,設置參數。我正是使用這種方法只是將數據從兵,不是G.

+0

你是如何說服Bing向你發送一個隨機數的?或者你只是拿一個查詢字符串或其他東西,並處理它來獲得一個數字?據我所知,我無法控制Search Appliance生成的XML有效負載。 – 2010-03-01 21:47:54

+0

隨機性是由API API調用者和隨機數作爲參數傳遞生成的。 Bing爲您提供XML。你有一個接受參數的XSLT。僅僅把買賣雙方放在一起。 – 2010-03-01 23:42:35

2

來到如果你不反對包括圖書館這樣做,有許多可用的,如random:random-sequence from EXSLT

+0

當您通過運行時環境直接訪問它時,無法使用實現random()的庫進行查看。 – dacracot 2010-03-01 22:03:57

+1

@dacracot - 但是OP沒有通過運行時envt直接訪問它。 – LarsH 2011-11-14 21:25:02

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> 
+0

PS - 它必須是XSL 1.1或更高版本。 – dacracot 2010-03-01 21:59:34

+0

酷招!不幸的是,Search Appliance只對XSLT v1.0感興趣。老鼠! – 2010-03-01 22:14:23

+1

不幸的是,在Saxon HE下不可用。本來是太好了,不可能是真的。 – 2013-06-11 07:44:04

1

如果你對微軟做的任何事情,我發現使用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>