タイトルは、実際の問題よりもはるかに複雑に聞こえます。私は、stackoverflow や他の場所で見つかった断片をまとめようとしましたが、完全には理解できません。
タスク: 反復したい項目のリストがあり、反復ごとにドロップダウン リストを作成し、デフォルトで現在の全体的なインデックスに基づいて項目を選択したいと考えています。
例はそれを非常に明確にします。XML は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<Plants>
<Plant PlantId="13" PlantType="Tree"/>
<Plant PlantId="25" PlantType="Flower"/>
<Plant PlantId="70" PlantType="Shrub"/>
</Plants>
それから私はいくつかの XSL を持っています:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:param name="listIdx" select="0">
</xsl:param>
<table>
<thead>
<tr>
<td>PlantType</td>
</tr>
</thead>
<tbody>
<xsl:for-each select="Plants/Plant">
<tr>
<td>
<select>
<xsl:for-each select="/Plants/Plant">
<xsl:element name="option">
<xsl:attribute name="value">
<xsl:value-of select="@PlantId"/>
</xsl:attribute>
<xsl:if test="count(.) = 2">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@PlantType"/>
</xsl:element>
</xsl:for-each>
</select>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
私が得るものはこれです:
PlantType
Tree [= Tree, Flower, Shrub のドロップダウン]
Tree [= Tree, Flower, Shrub のドロップダウン] Tree [= Tree, Flower, Shrub のドロップ
ダウン]
私が欲しいのは:
PlantType
Tree [= Tree, Flower, Shrub (idx 1 事前選択)
のドロップダウン] Flower [= Tree, Flower, Shrub (idx 2 事前選択)
のドロップダウン] Shrub [= Tree, Flower, Shrub (idx 3 事前選択) のドロップダウン]
2 つのアプローチがあると思います。1) 外側のループで listIdx を使用し (一致)、内側のループ内の現在のインデックスを listIdx と比較します。2) 内側のリスト インデックスと外側のリスト インデックスをオンザフライで比較します。主要なコンポーネントを説明するのが十分に簡単であれば、私はそれを非常に感謝しています! ありがとうございました!