0

如何动态提供参数名称?

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

我尝试使用以下 xsl 但没有奏效。

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

但以下将从参数获取 xml。

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

在运行时我知道有多少参数,但不能在 xsl 中定义相同的参数,因为参数的数量总是随着输入而变化。

您能否让我知道这在 xsl 中是否可行?

谢谢,基兰

4

2 回答 2

0

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

在我看来,您需要更改表示形式,以便与其传递几个不同的参数,每个参数都包含一个节点,而是传递一个具有固定名称的参数,其值为node set。具体如何实现取决于您使用的处理器以及调用样式表的方式,但如果可以实现,那么您可以执行以下操作

<xsl:for-each select="$params">
  <xsl:element name="param{position() - 1}">
    <xsl:copy-of select="." />
  </xsl:element>
</xsl:for-each>
于 2013-07-10T15:38:13.170 回答
0

使用 concat() 你得到不作为变量评估的字符串值。因此,尽管您认为您将变量传递给 xsl:copy 但您没有。你只复制一个字符串。

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

于 2013-07-10T15:20:18.383 回答