2016-11-10 89 views
0

我有一個正在被調用(不是誇大)大約100個參數左右的模板。我需要多次調用這個模板,因爲我需要修改父節點 - 有時它不存在,有時候有幾個節點,並且有幾個值可以被採用。重複調用xsl模板時避免多次傳遞參數

例如當前設置的一個例子片段:

<xsl:choose> 
    <xsl:when test="$test='1'"> 
    <body1> 
     <body3> 
     <xsl:call-template name="template1"> 
      <xsl:with-param name="param1" select="$previouslydefined1" /> 
      . 
      . 
      . 
      <xsl:with-param name="param100" select="$previouslydefined100" /> 
     </xsl:call-template> 
     <body3> 
    </body1> 
    </when> 
    <xsl:when test="$test='2'"> 
    <body2> 
     <xsl:call-template name="template1"> 
     <xsl:with-param name="param1" select="$previouslydefined1" /> 
     . 
     . 
     . 
     <xsl:with-param name="param100" select="$previouslydefined100" /> 
     </xsl:call-template> 
    </body2> 
    </when> 
    <xsl:otherwise> 
    <xsl:call-template name="template1"> 
     <xsl:with-param name="param1" select="$previouslydefined1" /> 
     . 
     . 
     . 
     <xsl:with-param name="param100" select="$previouslydefined100" /> 
    </xsl:call-template> 
    </otherwise> 
</xsl:choose> 

我覺得必須有這樣做的(可能是幾個),而不用重複輸入了參數大塊的一個更好的辦法,但我畫空白。

我有兩種方法,我知道不工作,但可能會有一個修改後的實現。

選擇的節點周圍的語句單獨(失敗 - 糟糕的語法):

<xsl:choose> 
    <xsl:when test="$test='1'"> 
    <body1> 
    </when> 
    <xsl:when test="$test='2'"> 
    <body2> 
    </when> 
    <xsl:otherwise/> 
    <xsl:call-template name="template1"> 
     <xsl:with-param name="param1" select="$previouslydefined1" /> 
     . 
     . 
     . 
     <xsl:with-param name="param1" select="$previouslydefined100" /> 
    </xsl:call-template> 
    <xsl:choose> 
    <xsl:when test="$test='1'"> 
    </body1> 
    </when> 
    <xsl:when test="$test='2'"> 
    </body2> 
    </when> 
    <xsl:otherwise/> 
</xsl:choose> 

使用的值設置節點(失敗 - 值可以爲空在這種情況下,標籤不應該存在):

<xsl:element name="{$node}"> 
    <xsl:element name="{$node2}"> 
    <xsl:call-template name="template1"> 
     <xsl:with-param name="param1" select="$previouslydefined1" /> 
     . 
     . 
     . 
     <xsl:with-param name="param1" select="$previouslydefined100" /> 
    </xsl:call-template> 
    </xsl:element> 
</xsl:element> 

我也明白,它應該有可能使用隧道(也許) - 我現在檢查這種可能性。

回答

0

似乎我搞砸了我通過參數設置節點的原始實現。在這種情況下,節點不會被創建,這是我最初尋找的可能性。通過使用必要的最大可能節點數量,然後根據需要填充,我只能將模板一次:

<xsl:element name="{$node}"> 
    <xsl:element name="{$node2}"> 
    <xsl:call-template name="template1"> 
     <xsl:with-param name="param1" select="$previouslydefined1" /> 
     . 
     . 
     . 
     <xsl:with-param name="param1" select="$previouslydefined100" /> 
    </xsl:call-template> 
    </xsl:element> 
</xsl:element>