これが XSLT を要求しすぎているのかどうかはわかりませんが、現在のmode
ようにテンプレートを複製するのではなく、理想的には 1 つのテンプレート内で動作することを除いて、動作に似たものを求めています。
<!-- Start -->
<xsl:apply-templates select="airports/airport" mode="start" />
<!-- End -->
<xsl:apply-templates select="airports/airport" mode="end" />
<!-- Template -->
<xsl:template match="airports/airport" mode="start">
<option value="{@iata}" data-alternative-spellings="{.},{@iata}">
<xsl:if test="@iata = 'LGW'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@iata"/> - <xsl:value-of select="."/>
</option>
</xsl:template>
<xsl:template match="airports/airport" mode="end">
<option value="{@iata}" data-alternative-spellings="{.},{@iata}">
<xsl:if test="@iata = 'LAX'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@iata"/> - <xsl:value-of select="."/>
</option>
</xsl:template>
値が特定のものである場合、テンプレートはselected
属性を適用します。この値は、テンプレートの呼び出し元によって異なる必要があります。2 つのケースがstart
ありend
、どちらも異なる基準を持っています。
私がやろうとしていることを説明する最も簡単な方法は、それを別の言語で書くことです:)
<!-- Start -->
getAirports(start);
<!-- End -->
getAirports(end);
<!-- Template -->
var getAirports = function(position)
{
var selected = '';
switch(position)
{
case 'start':
if(iata == 'LGW')
{
var selected = 'selected="selected"';
}
break;
case 'end':
if(iata == 'LAX')
{
var selected = 'selected="selected"';
}
break;
default:
break;
}
return '<option value="'+iata+'" data-alternative-spellings="'+iata+','+name+'" '+selected+'>'+iata+' - '+name+'</option>';
}
これはxsltで可能ですか、それともテンプレートを複製して使用することに固執する必要がありmode
ますか?
ありがとう!