我想将每个循环的a作为参数传递给另一个模板
<xsl:template name="dataTableGroup">
<xsl:call-template name="test">
<xsl:with-param name="pContent1">
<xsl:for-each
select="NewDataSet/Table[generate-id() = generate-id(key('countryKey', concat(Unit, ReportingBusUnitDesc)))]">
<tr>
<td class="columnTextRight">
<xsl:value-of select="ReportingBusUnitDesc"/>
</td>
</tr>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
并在此处使用
<xsl:template name="test">
<xsl:param name="pContent1"/>
<xsl:for-each select="$pContent1">
</xsl:for-each>
</xsl:template>
但是我只得到值而不是节点。从概念上讲,我希望它可以与xslt 1.0一起使用。
答案 0 :(得分:1)
如果使用XSLT 1.0处理器,则参数值是结果树片段,因此需要首先使用处理器特定的扩展功能,例如<xsl:template name="test">
<xsl:param name="pContent1"/>
<xsl:for-each select="exsl:node-set($pContent1)/tr" xmlns:exsl="http://exslt.org/common">
</xsl:for-each>
</xsl:template>
(http://exslt.org/exsl/functions/node-set/index.html),才能将其转换为节点集例如
<xsl:copy-of select="$pContent1"/>
无需复制任何扩展名即可以复制结果树片段的节点。 xsl:for-each
应该可以。
为了示例的完整性,我在xsl:stylesheet/transform
元素上声明了扩展功能的名称空间,通常您将其放在样式表的根元素exclude-result-prefixes="exsl"
上,并另外使用{{1} },以确保名称空间不会出现在任何结果元素上。
使用XSLT 2或3处理器,将变量直接用作包含tr
元素的片段节点不会有任何问题。