尝试使用xslt指定下拉列表的默认值?

时间:2014-07-08 15:03:55

标签: xslt

我的record个节点有@codeUSAlabel个喜欢"美国"。

<xsl:for-each select="/output/module/countries/data/record">
  <xsl:call-template name="option">
    <xsl:with-param name="value" select="@code"/>
    <xsl:with-param name="label" select="@name"/>
    <!--
         <xsl:with-param name="select" select="/output/module/formdata/data/record/billing_info/country"/>
    -->
    <xsl:param name="value" value="USA" />
  </xsl:call-template>
</xsl:for-each>

我试图将USA设为默认值。试过with:param name="select" select="USA",但那也不行。嗯?

理想情况下,如果评论中指定的其他节点没有值,我希望USA成为默认值。

2 个答案:

答案 0 :(得分:1)

在XSLT 2.0中,您可以在if中使用select

<xsl:with-param name="select" select="if (x) then x else 'USA'"/>

只需将x的两个实例替换为xpath(/output/module/formdata/data/record/billing_info/country)。

在XSLT 1.0中,您可以在xsl:choose模板中添加option,以测试传入的select参数的值。例如:

<xsl:choose>
    <xsl:when test="string($select)">
        <xsl:value-of select="$select"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:text>USA</xsl:text>
    </xsl:otherwise>
</xsl:choose>

如果xsl:choose更容易使用(例如在属性值中或者您需要多次访问该值),则可以将xsl:variable放在{{1}}中。

答案 1 :(得分:1)

以下是在任何版本的XSLT中如何执行此操作的方法:

<xsl:variable name="countryVal"
              select="/output/module/formdata/data/record/billing_info/country" />
<xsl:variable name="countryOrDefault"
          select="concat($countryVal, 
                         substring('USA', 1, 3 * not(normalize-space($countryVal)))" />
<xsl:for-each select="/output/module/countries/data/record">
  <xsl:call-template name="option">
    <xsl:with-param name="value" select="@code"/>
    <xsl:with-param name="label" select="@name"/>
    <xsl:with-param name="select" select="$countryOrDefault"/>
  </xsl:call-template>
</xsl:for-each>