我在xsl中有一个静态的国家/地区列表,我希望能够使用预先选择的值进行调用。要做到这一点,需要迭代每个节点并进行简单检查(优选同时保持国家自包含在同一文件中)。但是,执行< xsl:copy-of>有效,但是< xsl:for-each>在同一个表达式上没有 - 发生了什么?这可能吗?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:isoCountry="isoCountry:country">
<isoCountry:country>
<option value=""></option>
<option value="AU">Australia</option>
<option value="AD">Andorra</option>
<option value="AE">United Arab Emirates</option>
<option value="AF">Afghanistan</option>
<option value="AG">Antigua and Barbuda</option>
</isoCountry:country>
<xsl:template name="CountrySelect">
<select>
<option> <!-- correct number of nodes, good -->
<xsl:value-of select="count(document('')/*/isoCountry:menu/menu/*)"/>
</option>
<xsl:copy-of select="document('')/*/isoCountry:country/option"/> <!-- this works -->
<xsl:for-each select="document('')/*/isoCountry:country/option"> <!-- this does not -->
<option><xsl:value-of select="."/></option>
</xsl:for-each>
</select>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
以下是一个示例,当CountrySelect
属性匹配时,使用param
调用selected
模板生成value
属性。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:isoCountry="isoCountry:country"
exclude-result-prefixes="isoCountry">
<xsl:output method="html"/>
<isoCountry:country>
<option value=""/>
<option value="AU">Australia</option>
<option value="AD">Andorra</option>
<option value="AE">United Arab Emirates</option>
<option value="AF">Afghanistan</option>
<option value="AG">Antigua and Barbuda</option>
</isoCountry:country>
<xsl:template match="/">
<form>
<xsl:call-template name="CountrySelect">
<xsl:with-param name="selected">AU</xsl:with-param>
</xsl:call-template>
</form>
</xsl:template>
<xsl:template name="CountrySelect">
<xsl:param name="selected"/>
<select>
<xsl:for-each select="document('')/*/isoCountry:country/option">
<xsl:element name="{name()}"> <!-- could just be name="option" -->
<xsl:if test="$selected=@value">
<xsl:attribute name="selected">true</xsl:attribute>
</xsl:if>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="text()"/>
</xsl:element>
</xsl:for-each>
</select>
</xsl:template>
</xsl:stylesheet>