#xslt #xslt-1.0
#xslt #xslt-1.0
Вопрос:
Я хотел бы вызвать template2 изнутри template1 и предоставить ему параметр из template1.
Прямо сейчас у меня есть что-то вроде этого:
<xsl:template name="template1" match="home/sentences/sentence">
<xsl:if test="something...">
<new_sentence>
<!-- ...other unrelated stuff... -->
<xsl:apply-templates select="key('get_sentence_attribute', tokenRef/@tokID)"/>
<!--Here I point to the template I made for tokens.
But I also wish to provide it with the value returned by get_sentence_attribute -->
<xsl:apply-templates select="../../tokens"/>
</new_sentence>
</xsl:if>
</xsl:template>
<xsl:template name="template2" match="home/tokens">
<!-- ... -->
</xsl:template>
В принципе, мне нужно убедиться, что значения, выбранные моим шаблоном токенов, соответствуют sentence_attribute, который я получаю в моем шаблоне предложений. Я поискал в Google и нашел <xsl:with-param>
элемент; но это довольно запутанно для меня, и я даже не уверен, что это то, что мне нужно.
Спасибо за любую помощь!
Ответ №1:
<!-- 1. store your results in a variable -->
<xsl:variable name="result">
<xsl:apply-templates select="key('get_sentence_attribute', tokenRef/@tokID)"/>
</xsl:variable>
<!-- 2. call your template with a param value -->
<xsl:call-template name="named-template">
<xsl:with-param name="param1" value="$result"/>
</xsl:call-template/>
...
...
<!-- 3. you need to declare your template to accept a parameter -->
<xsl:template name="named-template">
<xsl:param name="param1"/>
<!-- do stuff with $param1-->
</xsl:template>
Комментарии:
1. Я хочу «локальную» переменную, созданную внутри
template1
и переданную в template2. Итак, я должен добавить1.
и2.
внутриtemplate1
и3.
внутриtemplate2
? Я получаю сообщение «ошибка синтаксического анализа таблицы стилей xslt»2. У меня было несколько проблем, но методом проб и ошибок все исправил… Однако у вас есть синтаксическая ошибка:
</xsl:call-template/>
. Я принял ваш ответ, но исправьте/>
. Кроме того, в будущем, когда вы публикуете ответ, попробуйте ответить примером, основанным на примере кода вопроса; это значительно упрощает задачу.