У меня есть шаблон, который вызывается с (не преувеличением) примерно 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>
Я также понимаю, что должно быть возможно использовать туннелирование (возможно) - теперь я проверяю эту возможность.