2013-10-11 83 views
3

您好,我需要在我的XSL中實現下面的功能,但它似乎卡住了...任何幫助將不勝感激。帶有動態節點的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> 

回答

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"> 
+1

尊敬的伊恩你的答案完美的作品非常感謝你! –