1

好的,所以这个标题有点混乱。我认为解释我的问题要容易一些。在 perl 中,我得到一个字符串值数组(我不确定它会持续多长时间,因为它取决于文件)。因为我不知道数组会有多长,所以我在 perl 中使用了for-each一个变量,并在 perl 中创建了一个变量,它只是一个长字符串,在 xslt 中创建了一堆变量。例如,这是我的代码:

foreach my $node (@objects) {
    $count++;
    $xslt_vars = $xslt_vars . '<xsl:variable name="namedsets' . $count . '"/><xsl:text>' . $node . '</xsl:text></xsl:variable>';
}

我的问题是我在我的 xslt 样式表中创建了未知数量的变量。我在 xslt 的变量中有那个数字,我在模板中使用它,如下所示:

<xsl:template name="expression">
    <xsl:param name="count"/>
    <xsl:choose>
        <xsl:when test="$count &gt; $name-count">
        </xsl:when>
        <xsl:otherwise>
            <xsl:for-each select=".//expression">
                <xsl:variable name="expression" select="."/>
                <xsl:variable name="express-test">
                    <xsl:text>$name-sets{$count}</xsl:text>
                </xsl:variable>
                <xsl:variable name="trying">
                    <xsl:value-of select="{$express-test}"/>
                </xsl:variable>
                <xsl:if test="contains($expression, $trying)">
                    <a>This Worked</a>
                </xsl:if>
            </xsl:for-each>
            <xsl:call-template name="expression">
                <xsl:with-param name="count" select="$count + 1"/>
            </xsl:call-template>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

所以$count与 perl 代码示例中的计数不同。perlcount$name-count(我不知道我为什么这样做,但这并不重要)。我创建$express-test是为了获得当前$namedset00变量的名称。我的问题是用正确的数字调用该变量。如您所见,我尝试设置$trying为 的值{$express-test},但在 xslt 中不允许使用此语法。有没有人在 xslt 中做过类似的事情?或者知道如何在 xslt 中调用不断变化的变量名?

4

1 回答 1

1

您可以使用当前方法做的最好的事情是执行以下操作:

 <xsl:value-of select="document('')//xsl:variable[@name = $express-text]" />

但我建议探索如何正确使用 XSL 参数并将单个节点集传递给 XSLT,而不是将变量与字符串连接一起修补。节点集将更容易动态访问。

于 2013-07-27T01:33:12.777 回答