如何在XSLT中声明和迭代数组?

时间:2009-05-22 22:27:08

标签: arrays xslt drop-down-menu iteration

我的要求是 - 使用XSLT-显示美国各州的下拉列表,并选择 print '选择'在XML中声明的将使用我的样式表的特定内容。

我在考虑使用状态声明一个数组并迭代它但我不知道该怎么做。

注意:欢迎提出更多想法;)

2 个答案:

答案 0 :(得分:12)

执行此操作的一种方法是将状态数据嵌入样式表本身,并使用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>

如果您有任何问题,请与我们联系。

答案 1 :(得分:1)

理想情况下,您可以在XML文件中存储状态列表,并使用XSLT迭代它们。

更新: 如果您无法编辑XML,可以使用document function来加载第二个数据文件中的数据: