2016-11-10 84 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>