2014-07-08 99 views
0

我的record節點有一個@codeUSAlabel像「美國」。嘗試使用xslt指定下拉列表的默認值?

<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爲默認值。

+0

XSLT是什麼版本的? –

回答

1

在XSLT 2.0,你可以在select使用if

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

只需用XPath的(/output/module/formdata/data/record/billing_info/country)取代的x兩個實例。在xsl:variable

<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如果它更容易:

在XSLT 1.0,你可以添加一個xsl:chooseoption模板測試中通過了該select PARAM有價值的東西等。使用(如在屬性值中,或者如果您需要多次訪問該值)。

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>