你好我需要在我的XSL中实现以下功能,但似乎我被卡住了......任何帮助都会非常感激。
请在下面的代码段中查看我的评论。
<xsl:template name="/">
<xsl:call-template name="looptemplate">
<xsl:with-param name="x" select="1"/>
<xsl:with-param name="max" select="10"/>
</xsl:call-template>
</xsl:template>
<xsl:template name=" looptemplate">
<xsl:param name="x"/>
<xsl:param name="max"/>
<xsl:call-template name="TemplateToCall">
<xsl:with-param name="nodePath" select="a/b$i"></xsl:with-param>
<!--
Get dynamically root nodes
a/b1, a/b2, a/b3 etc
-->
</xsl:call-template>
<!--
Loop again until x reaches max
-->
</xsl:template>
<xsl:template name="TemplateToCall">
<xsl:param name="nodePath"/>
<xsl:for-each select="$nodePath">
<xsl:value-of select="value1"/>, <xsl:value-of select="value2"/>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:3)
您不能将XPath构建为字符串并对其进行动态评估(至少在普通XSLT 1.0或2.0中,XSLT 3.0中会有xsl:evaluate
instruction),但您可以执行类似的操作
<xsl:call-template name="TemplateToCall">
<xsl:with-param name="nodes" select="a/*[local-name() = concat('b', $i)]"/>
然后在被调用的模板中
<xsl:template name="TemplateToCall">
<xsl:param name="nodes"/>
<xsl:for-each select="$nodes">