Как передать переменные между двумя шаблонами в XSLT

Как передавать переменные между двумя шаблонами в XSLT.

Я не могу использовать глобальную переменную, потому что значение переменной зависит от текущего оцениваемого узла.

Скажем, у меня есть XSLT:

<xsl:template match="product">
<xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/>
..
..
..
<xsl:apply-templates select="countries/country"/>
</xsl:template>

<xsl:template match="countries/country">
<tr id="country-id">
  <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td>
..
..

Это дает ошибку, так как $pr-pos недоступен во втором шаблоне.

Как передать значение переменной pr-pos в другой шаблон? Как я могу это сделать?


person Harshdeep    schedule 30.06.2012    source источник
comment
В вашем случае вам действительно не нужно передавать переменную. Значение $pr-pos, которое вы хотите передать, видно из шаблона country.   -  person Mitya    schedule 01.07.2012
comment
Во всех языках программирования (ну, в большинстве) есть средства для передачи информации другому исполнительному блоку, и изучение того, как это сделать, является одной из основ. Этот вопрос примерно эквивалентен вопросу, как передать переменные между двумя функциями в JavaScript, или сказать, что я пробовал function a(){ var i=5; b(); } function b(){ alert(i); }, но i недоступен во второй функции.   -  person    schedule 01.07.2012
comment
@torazaburo: я не мог найти ничего полезного, что объясняет мне, как это сделать в Google. Я не знал этого, поэтому спросил, если у вас есть проблемы с людьми, задающими вопросы, почему бы вам не отключить свою учетную запись в StackOverflow. Поищите в Google и скажите, что нашли какой-нибудь хороший документ по этому вопросу, кроме документации по w3.   -  person Harshdeep    schedule 01.07.2012
comment
@Utkanos: Нет, это не так. Вы должны явно передать «локальную переменную» другим шаблонам, как показано в ответе ниже.   -  person Harshdeep    schedule 01.07.2012
comment
@Harshdeep - извините, но это действительно так - позвольте мне доказать это. Вы можете передавать переменные, но это означает, что вы должны это делать. На самом деле вы обнаружите, что явная передача переменных между шаблонами (за исключением именованных шаблонов) на самом деле весьма необычна.   -  person Mitya    schedule 01.07.2012
comment
@Utkanos: вы гуру XML :) Извините, я не понял, что вы пытались сказать в первый раз. Я думал, вы говорите, что приведенный выше фрагмент не вызовет никаких ошибок, и я могу использовать pr-pos точно так же во втором шаблоне. Еще раз спасибо за помощь. Вы попали в проект XSLT, и вы всегда готовы помочь. :)   -  person Harshdeep    schedule 01.07.2012
comment
Никаких проблем - только уточнял. XSLT может быть трудным для начала. Соберешь моментально :)   -  person Mitya    schedule 01.07.2012
comment
@Harshdepp, если взять только один пример, не обязательно рекомендуемый, рассмотрите учебник XSLT по адресу zvon. org/xxl/XSLTutorial/Output/contents.html и ознакомьтесь со страницей 34. Параметры для шаблона можно передать с помощью элемента xsl:with-param. Я бы посоветовал вместо того, чтобы пытаться изучить основные аспекты языка программирования с помощью Google, сесть и пройти какой-нибудь курс или учебник, подобный этому. Если вы действительно хотите изучить основы с помощью Google, поиск аргументов для передачи в шаблон xslt немедленно открыл для меня соответствующие страницы. Что вы пытались искать?   -  person    schedule 02.07.2012


Ответы (1)


person    schedule
comment
Я поискал еще немного и сделал то же самое, прежде чем проверять ответ на StackOverflow, и это РАБОТАЛО. Тогда тоже спасибо за помощь :) - person Harshdeep; 01.07.2012