2017-11-07 1 views
0

XSLT 1.0を使用する変数に割り当てられた項目のリストを定義し、ランダムな項目を取り出してHTMLブロックの属性を参照する必要があります。XSLT:範囲からランダムな項目を選択してその属性を出力する

私は本質的に必要であることを考えています:
2)ランダム
3のいずれかを選択し、私のHTML

にランダムに選択された項目の属性を引き出します)

1)項目のリストを定義します。

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

これは私が最終的に思い付いたものです。他の人には役に立つかもしれないのでここで更新してください。

<?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> 

この例では、テストの結果、

を働いています
関連する問題