2013-07-26 70 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傳球而不是修補這些變量和字符串連接一起。節點集將更容易動態訪問。

相關問題