在xsl中动态定义param的名称

时间:2013-07-10 10:23:28

标签: xslt

如何动态提供参数名称?

ex:我有很少的参数作为输入进入xsl,每个参数都包含xml内容。但是,在xsl中,我不知道在运行时会有多少个参数。

我尝试过跟随xsl但没有用。

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

但以下内容将从param获取xml。

 <xsl:element name="param1">
            <xsl:copy-of select="$param1"/>
        </xsl:element>

在运行时我知道有多少个参数但是在xsl中不能定义相同,因为no.of参数总是为输入而改变。

如果在xsl中可以实现这一点,请告诉我吗?

谢谢, 基兰

2 个答案:

答案 0 :(得分:0)

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

我认为你不能用xslt中的动态参数数做你想做的事。如果你有单独文件形式的参数,你可以使用xslt 2.0中的collection()函数。例如,它可以以这种方式工作:<xsl:variable name="params" select="collection('file:///path/to/params/param*.xml')"/>

答案 1 :(得分:0)

  

我有很少的参数作为输入进入xsl,每个参数都包含xml内容。但是,在xsl中,我不知道在运行时会有多少个参数。

听起来我需要更改表示,以便不是传递几个不同的参数而是每个持有一个节点,而是传递带有固定名称的一个参数,其值为节点集。究竟如何实现这取决于你正在使用什么处理器以及如何调用样式表,但如果可以实现,那么你可以做一些事情,比如

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