2013-07-26 3 views
1

Хорошо, так что заголовок немного запутан. Я думаю, что немного легче объяснить мою проблему. В perl я получаю массив строковых значений (я не уверен, сколько времени это будет, потому что это зависит от файла). Поскольку я не знаю, как долго будет массив, я использую for-each в perl и создаю переменную в 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, а не латать переменные вместе со конкатенацией строк. Динамический набор узлов будет намного проще.

Смежные вопросы