2010-03-01 14 views
11

Ich passe eine Google Search Appliance an, die XSLT verwendet, um dem Benutzer Ergebnisse anzuzeigen. Unser Entwurf sieht vor, dass eines von mehreren Bildern zufällig auf der Ergebnisseite eingefügt wird. Gibt es eine Möglichkeit, Zufälligkeit in XSLT zu verwenden? (Pseudozufälligkeit ist in Ordnung für diese Anwendung.)Zufällige Elemente in XSLT

Aufruf von zufälligen Vorlagen wäre in Ordnung, als wäre nur in der Lage, eine Zufallszahl und Zweig basierend darauf zu generieren.

+3

Da die Search Appliance präsentieren nur in XSLT 1.0 interessiert zu sein scheint, habe ich beschlossen, mit der Verwendung der Länge zu gehen der Suchzeichenfolge, um zu bestimmen, welches Bild angezeigt wird. Also benutze ich etwas wie diesen, um einen 0-3 Zahlenbereich zu erhalten:

+0

+1, gut und praktisch Umgehung unter den Umständen. Ich wollte etwas Ähnliches wie eine Antwort schreiben, bevor ich das las. – Tomalak

Antwort

5

Abhängig von Ihrer Plattform ermöglicht XSL die Eingabe von Benutzercode wie C#. Ich empfehle das nicht. Besser, ich würde Ihre XSL akzeptieren einen Parameter und was auch immer generiert Ihre XML-Payload oder XSLT und kann auch die Zufallszahl generieren, die Einstellung des Parameters. Ich habe dies getan, genau diesen Ansatz mit Ausnahme der Daten von Bing kam, nicht G.

+0

Wie hast du Bing davon überzeugt, dir eine Zufallszahl zu schicken? Oder haben Sie nur eine Abfragezeichenfolge oder etwas genommen und es verarbeitet, um eine Nummer heraus zu bekommen? Soweit ich das beurteilen kann, habe ich nicht viel Kontrolle über die XML-Payload, die die Search Appliance generiert. –

+0

Zufälligkeit wird vom Bing-API-Aufrufer generiert und die Zufallszahl als Parameter übergeben. Bing gibt dir XML. Sie haben eine XSLT, die Parameter akzeptiert. Bringen Sie Käufer und Verkäufer nur zusammen. –

2

Wenn Sie einschließlich Bibliotheken nicht abgeneigt sind, gibt es viele zur Verfügung, wie random:random-sequence from EXSLT

+0

Die Verwendung einer Bibliothek, die random() implementiert, wird nicht angezeigt, wenn Sie über die Laufzeitumgebung direkten Zugriff darauf haben. – dacracot

+1

@dacracot - aber das OP hat keinen direkten Zugriff auf es über die Laufzeit envt. – LarsH

4

Wenn Sie eine Java-basierte XSLT Mit dieser Funktion können Sie Aufrufe an jede statische Methode innerhalb der Java-Bibliotheken wie java.lang.Math.random() ausführen. Hier ist die Syntax ...

<?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 - Es muss XSL Version 1.1 oder höher sein. – dacracot

+0

Cooler Trick! Leider scheint die Search Appliance nur an XSLT v1.0 interessiert zu sein. Ratten! –

+1

Nicht verfügbar unter Saxon HE, leider. Wäre zu schön gewesen, um wahr zu sein. –

1

Wenn Sie dies für alles Microsoft tun, fand ich, dass XSLT Funktion ddwrt: Random funktioniert.

Ich verwende die nach der Zufallszahl erstellen

<xsl:variable name="RowCount" select="count($Rows)" /> 
<xsl:variable name="RandomNumber" select="ddwrt:Random(1, $RowCount)" /> 

und die folgenden

<xsl:for-each select="$Rows[position() = $RandomNumber]"> 
<xsl:value-of select="@Title" /></xsl:for-each> 
Verwandte Themen