11

私の要件は、XSLT を使用して、米国の州のドロップダウン リストを表示し、スタイル シートを使用する XML で宣言された特定のものに「選択済み」を出力することです。

状態で配列を宣言して反復することを考えていましたが、その方法がわかりません。

注: より多くのアイデアを歓迎します ;)

4

2 に答える 2

12

これを行う 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>

ご不明な点がございましたら、お知らせください。

于 2009-05-22T23:00:30.710 に答える
1

理想的には、状態のリストを XML ファイルに保存し、XSLT を使用してそれらを反復するだけです。

更新: XML を編集できない場合は、ドキュメント関数を使用して 2 番目のデータ ファイルからデータを読み込むことを検討できます。

于 2009-05-22T22:34:31.823 に答える