我的record
个节点有@code
个USA
和label
个喜欢"美国"。
<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 :(得分: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>