我有一个模板,它被调用(不夸张)大约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>