好的,所以这个标题有点令人困惑。我觉得把我的问题解释清楚会容易一点。在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 > $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代码示例中的计数不同。perl count
就是$name-count
(我不知道我为什么这么做,但这并不重要)。我创建了$express-test
,以便获得当前$namedset00
变量的名称。我的问题是用正确的数字调用那个变量。正如您所看到的,我尝试将$trying
设置为{$express-test}
的值,但xslt中不允许使用这种语法。有人在xslt中做过类似的事情吗?或者知道如何在xslt中调用一个不断变化的变量名吗?
使用当前方法所能做的最好的事情是这样做:
<xsl:value-of select="document('')//xsl:variable[@name = $express-text]" />
但我建议您探索如何正确使用XSL参数并将单个节点集传递给XSLT,而不是用字符串连接将变量拼凑在一起。节点集将更易于动态访问。