XSLT 2.0 Как использовать счетчики и переменные в различных циклах и структуре - PullRequest
1 голос
/ 22 июля 2010

Итак, я знаю, что вы не можете получить доступ к переменным вне области видимости, что они неизменны, что XSLT является функциональным, а не императивным и т. Д ...

Но мне нужен универсальный подход к чему-то, что было бы тривиально с глобальными изменяемыми переменными (это звучит как зло, просто говоря это :). Вот пример ...

<xsl:template match="t1">
  <xsl:if test="someLogic">
    <!-- I know, can't do this but just to explain... -->
    <xsl:variable name="varName">numberOrText, maybe even some arithmetic like $varName+1</xsl:variable>
  </xsl:if>
</xsl:template>

<xsl:template match="t2">
  <xsl:value-of select="$varName"/>
</xsl:template>

И проблема в том, что во время обработки может быть любое количество шаблонов, таких как t1 и t2, и шаблоны, которые одновременно изменяют и используют переменную.

Возможно, часть проблемы в том, что значения зависят от порядка обработки, но это преднамеренно - это то, что требуется.

Одна возможность, о которой я подумал, - передавать значения везде как параметры. Но проблема в том, что один листовой шаблон может потребоваться изменить его, а затем обработка возобновится ... он потеряет это изменение. Если только у шаблона нет способа вернуть параметры, и тогда я смогу передать эти возвращенные параметры? Думая о чисто функциональном языке программирования общего назначения, кажется, что так можно поступить - вызывая рекурсивно, но используя возвращаемые значения для дальнейших вызовов, чтобы можно было «переносить» значения.

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

Любые указатели, идеи и т. Д., Добро пожаловать.

1 Ответ

0 голосов
/ 24 октября 2011

Я думаю, что ответ был включен в мой вопрос и другие комментарии.Вот некоторые из них:

"каким-то образом шаблон может возвращать параметры, а затем я мог бы передать эти возвращенные параметры? Думая о чисто функциональном языке программирования общего назначения, кажется, что так можно было бы сделать- вызывать рекурсивно, но с использованием возвращаемых значений для дальнейших вызовов, чтобы можно было «переносить» значения.шаблон и параметр туннеля. Только с входом и выходом можно точно сказать, как. "

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