在重复调用xsl模板时避免多次传递参数

  • 本文关键字:参数 调用 xsl xslt-1.0
  • 更新时间 :
  • 英文 :


我有一个模板,它被调用(不夸张)大约100个参数。我需要多次调用这个模板,因为我需要修改父节点——有时它不存在,有时有几个节点,并且有几个值可以取。

当前设置的示例代码片段:

<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>

我也明白应该可以使用隧道(也许)-我现在正在检查这种可能性

似乎我搞砸了通过参数设置节点的原始实现。可以将值保留为空,在这种情况下不会创建节点,这是我最初寻找的。通过使用必要的最大可能节点数量,然后根据需要填充,我只能使用模板一次:

<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>

相关内容

  • 没有找到相关文章

最新更新