2016-03-03 4 views
1

Вот мой XSLT:Переменная область в XSLT?

<xsl:choose> 
    <xsl:when test="string-length(/*/location/name)"> 
    <xsl:variable name="pagurl">/location/<xsl:value-of select="/*/location/@id" />comments</xsl:variable> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:variable name="pagurl">/state/<xsl:value-of select="/*/state/@code" />/comments</xsl:variable> 
    </xsl:otherwise> 
</xsl:choose> 

<div class="pagination_outer" id="pager"> 
    <xsl:call-template name="pagination"> 
    <xsl:with-param name="url"><xsl:value-of select="$pagurl"/></xsl:with-param>         
    </xsl:call-template> 
</div> 

Я делаю следующее:

  1. Присвоение переменной $pagurl до значения на основе длины строки.
  2. Попытка использовать переменную внутри вызова <xsl:with-param name="url"><xsl:value-of select="$pagurl"/></xsl:with-param>

Когда я включаю этот призыв страницы никогда не кажется, чтобы закончить загрузку, однако, когда я не использую его загрузки страницы просто отлично. Я предполагаю, что есть ошибка в моем использовании этого.

Не думаю, что необходимо посмотреть pagination template, так как он отлично работает, если я жестко задаю значение.

Предложения?

+0

Похоже, вы пытаетесь [выполнить динамический XPath] (http://stackoverflow.com/questions/4630023/dynamic-xpath-in-xslt)? – har07

+1

@ har07, нет, это ничего сложного - просто [обзор] (http://stackoverflow.com/a/35763135/290085). – kjhughes

ответ

0

переменная, pageurl, определенные в xsl:when и (опять же) в xsl:otherwise, выходит за рамки к тому времени, вы пытаетесь использовать его в качестве параметра pagination. Вы говорите, что страница никогда не заканчивает загрузку, но я подозреваю, что вам не хватает сообщения об ошибке.

Попробуйте вместо этого:

<xsl:variable name="pagurl"> 
    <xsl:choose> 
    <xsl:when test="string-length(/*/location/name)"> 
     <xsl:text>/location/</xsl:text> 
     <xsl:value-of select="/*/location/@id"/> 
     <xsl:text>comments</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>/state/</xsl:text> 
     <xsl:value-of select="/*/state/@code"/> 
     <xsl:text>/comments</xsl:text> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

<div class="pagination_outer" id="pager"> 
    <xsl:call-template name="pagination"> 
    <xsl:with-param name="url" select="$pagurl"/> 
    </xsl:call-template> 
</div>