2013-07-26 76 views
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代码的样本。 perl count$name-count(我不知道为什么我这样做,但这并不重要)。我创建了$express-test以获得当前$namedset00变量的名称。我的问题是用正确的数字调用该变量。正如你所看到的,我试图设置$trying的值为{$express-test},但是这种语法在xslt中是不允许的。有没有人在xslt中做过类似的事情?或者知道如何在xslt中调用变量名称?

回答

1

你可以用你现在的方法做的最好的是做这样的事情:

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

但我会建议探索如何正确使用XSL参数并在单个节点集到您的XSLT传球而不是修补这些变量和字符串连接一起。节点集将更容易动态访问。

相关问题