xsl scope help - PullRequest
       40

xsl scope help

0 голосов
/ 26 сентября 2008

У меня есть файл xsl, который получает переменные из xml, и они, похоже, не могут видеть друг друга. Я знаю, что это проблема масштаба, я просто не знаю, что я делаю неправильно.

<xsl:template match="one">
 <xsl:variable name="varOne" select="@count" />
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>

Здесь это было упрощено.

Любая помощь приветствуется.

Ответы [ 4 ]

3 голосов
/ 26 сентября 2008

Вы также можете решить некоторые проблемы с областями видимости, передав параметры ...

<xsl:apply-templates select="two">
 <xsl:with-param name="varOne">
  <xsl:value-of select="one/@count"/>
 </xsl:with-param>
</xsl:apply-templates>

<xsl:template match="two">
 <xsl:param name="varOne"/>
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>
2 голосов
/ 27 сентября 2008

Область действия переменной в XSLT - это включающий ее элемент. Чтобы сделать переменную видимой для нескольких элементов, ее объявление должно быть на том же уровне или выше, чем у этих элементов.

2 голосов
/ 26 сентября 2008

Помня, что переменные xsl неизменны ...

<!-- You may want to use absolute path -->
<xsl:variable name="varOne" select="one/@count" />

<xsl:template match="one">
<!-- // do something --> 
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>
2 голосов
/ 26 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...