Xslt 在xsl中动态定义参数的名称

Xslt 在xsl中动态定义参数的名称,xslt,Xslt,如何动态提供参数名 例如:我有几个参数作为输入进入xsl,每个参数都包含xml内容。然而,在xsl中,我不知道在运行时会有多少个参数 我尝试过使用以下xsl,但没有成功 <xsl:element name="param0"> <xsl:copy-of select="concat('$','param0')/> </xsl:element> 使用concat()可以获得未作为变量计算的字符串值。因此,尽管您认为可以

如何动态提供参数名

例如:我有几个参数作为输入进入xsl,每个参数都包含xml内容。然而,在xsl中,我不知道在运行时会有多少个参数

我尝试过使用以下xsl,但没有成功

 <xsl:element name="param0">
            <xsl:copy-of select="concat('$','param0')/>
        </xsl:element>

使用concat()可以获得未作为变量计算的字符串值。因此,尽管您认为可以将一个变量传递到xsl:copy,但实际上并没有。您只复制一个字符串

我认为,在xslt中,使用动态数量的参数无法实现您想要的功能。如果有单独文件形式的参数,可以使用xslt 2.0中的collection()函数。例如,它可以这样工作:

我将几个参数作为输入输入到xsl中,每个参数都包含xml内容。然而,在xsl中,我不知道在运行时会有多少个参数

在我看来,您需要更改表示形式,这样就不用传递多个不同的参数(每个参数包含一个节点),而是传递一个具有固定名称的参数,其值为节点集。具体实现方式取决于您使用的处理器和如何调用样式表,但如果可以实现,则可以执行以下操作

<xsl:for-each select="$params">
  <xsl:element name="param{position() - 1}">
    <xsl:copy-of select="." />
  </xsl:element>
</xsl:for-each>


很抱歉,我不明白应该是什么:“在xsl中,我不知道运行时会有多少个参数。”在XSLT中,您必须始终声明希望使用
xsl:param
的参数。此参数可以有默认值(使用slect=“…”)。有时,我可能有2个参数,有时有5个参数,并且输入的参数数量没有限制。如果我必须声明参数,我可以在侧循环或带有动态名称的模板中声明吗?Kiran,谢谢Peter,但这不是问题所在。在concat name函数中,我想返回“$newparam”的值。新参数是从$param0获得的值。可能吗?谢谢你的回复。
<xsl:for-each select="$params">
  <xsl:element name="param{position() - 1}">
    <xsl:copy-of select="." />
  </xsl:element>
</xsl:for-each>