带动态节点的XSL调用模板

时间:2013-10-11 09:52:33

标签: xslt

你好我需要在我的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>

1 个答案:

答案 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">