Подтвердить что ты не робот

Случайные элементы в XSLT

Я настраиваю Google Search Appliance, который использует XSLT для представления результатов пользователю. Наш дизайн требует, чтобы одно из нескольких изображений включалось случайным образом на страницу результатов. Есть ли способ использовать случайность в XSLT? (Псевдослучайность просто подходит для этого приложения.)

Вызов случайных шаблонов будет прекрасен, так как будет просто генерировать случайное число и ветвь на основе этого.

4b9b3361

Ответ 1

В зависимости от вашей платформы XSL позволяет вводить код пользователя, например С#. Я не рекомендую этого. Лучше я бы хотел, чтобы XSL принимал параметр и все, что генерирует вашу полезную нагрузку XML или XSLT, а также может генерировать случайное число, задавая параметр. Я сделал это точно, используя этот подход, за исключением данных, полученных от Bing, а не G.

Ответ 2

Вы можете генерировать в чистых последовательностях XSLT случайных чисел, а также случайные перестановки чисел в [1.. N].

Для этого используйте библиотеку FXSL (написанную в чистом XSLT).

В этой статье описываются шаблоны, которые нужно использовать, и есть примеры:

" Литье кости с FXSL: функции генерации случайных чисел в XSLT".

Ответ 3

Если вы используете механизм XSLT на основе Java, это позволит вам совершать вызовы на любой статический метод в библиотеках 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>

Ответ 4

Если вы не прочь включить библиотеки, есть много доступных, таких как random: random-sequence из EXSLT

Ответ 5

Если вы делаете это ради чего-то 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>