使用XSLT 1.0我需要定义一个分配给变量的项目列表,并拉出一个随机项目并在HTML块中引用它的属性。
我认为我基本上需要:
1)定义项目列表
2)随机选择一个
3)将随机选择的项目的属性拉出到我的HTML
Output
HTML部分目前是伪代码,但这是我目前所拥有的。我很感激任何指示或建议让这个工作。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math">
<xsl:template name="item">
<!-- List of items -->
<xsl:variable name="items" as="element()*">
<item name="item-one" link="http://www.website.com" />
<item name="item-two" link="http://www.website.com" />
<item name="item-two" link="http://www.website.com" />
</xsl:variable>
<!-- Select item at random and assign to variable -->
<xsl:variable name="random-item">
<xsl:value-of select="$items[(floor(math:random()*2) mod 2) + 1]" />
</xsl:variable>
<!-- Output -->
<div class="item">
<a href="${item-link}" >
<picture>
<source srcset="/images/${item-name}.gif" media="(min-width: 1280px)" />
<source srcset="/images/${item-name}.gif" media="(min-width: 768px)" />
<img src="/images/${item-name}.gif" />
</picture>
</a>
</div>
</xsl:template>
感谢。
答案 0 :(得分:0)
这是我最终想出来的。在此更新,因为它可能对其他人有用。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math">
<xsl:template name="item">
<!-- List of items -->
<xsl:variable name="items">
<item name="item-one" link="http://www.website.com">Item 1</item>
<item name="item-two" link="http://www.website.com">Item 2</item>
<item name="item-three" link="http://www.website.com">Item 3</item>
</xsl:variable>
<!-- Intermediate inline data model. All that's available in XSLT 1.0 -->
<xsl:param name="array" select="document('')/*/xsl:variable[@name='items']/*" />
<!-- Random number (based on number of items in list above) -->
<xsl:variable name="random-number" select="(floor(math:random()*3) mod 3) + 1" />
<!-- Item attributes (of the randomly selected item) -->
<xsl:variable name="item-name" select="$array[number($random-number)]/@name" />
<xsl:variable name="item-link" select="$array[number($random-number)]/@link" />
<xsl:variable name="item-alt" select="$array[number($random-number)]" />
<!-- Output (using attribute value templates) -->
<div class="item">
<a href="{$item-link}" >
<picture>
<source srcset="/images/{$item-name}.png" media="(min-width: 1280px)" />
<source srcset="/images/{$item-name}.png" media="(min-width: 768px)" />
<img src="/images/{$item-name}" alt="{$item-alt}" />
</picture>
</a>
</div>
</xsl:template>
此示例已经过测试并正常运行