私の要件は、XSLT を使用して、米国の州のドロップダウン リストを表示し、スタイル シートを使用する XML で宣言された特定のものに「選択済み」を出力することです。
状態で配列を宣言して反復することを考えていましたが、その方法がわかりません。
注: より多くのアイデアを歓迎します ;)
私の要件は、XSLT を使用して、米国の州のドロップダウン リストを表示し、スタイル シートを使用する XML で宣言された特定のものに「選択済み」を出力することです。
状態で配列を宣言して反復することを考えていましたが、その方法がわかりません。
注: より多くのアイデアを歓迎します ;)
これを行う 1 つの方法は、状態データをスタイルシート自体に埋め込み、document('')
次のように を使用してスタイルシート ドキュメントにアクセスすることです。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="whatever"
exclude-result-prefixes="my">
<xsl:output indent="yes"/>
<!-- The value of the state you want to select, supplied in the input XML -->
<xsl:variable name="selected-state" select="/xpath/to/state/value"/>
<!-- You have to use a namespace, or the XSLT processor will complain -->
<my:states>
<option>Alabama</option>
<option>Alaska</option>
<!-- ... -->
<option>Wisconsin</option>
<option>Wyoming</option>
</my:states>
<xsl:template match="/">
<!-- rest of HTML -->
<select name="state">
<!-- Access the embedded document as an internal "config" file -->
<xsl:apply-templates select="document('')/*/my:states/option"/>
</select>
<!-- rest of HTML -->
</xsl:template>
<!-- Copy each option -->
<xsl:template match="option">
<xsl:copy>
<!-- Add selected="selected" if this is the one -->
<xsl:if test=". = $selected-state">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
ご不明な点がございましたら、お知らせください。
理想的には、状態のリストを XML ファイルに保存し、XSLT を使用してそれらを反復するだけです。
更新: XML を編集できない場合は、ドキュメント関数を使用して 2 番目のデータ ファイルからデータを読み込むことを検討できます。