2013-05-09 2 views
0

У меня есть пример XML, как это:XSLT отправить переменную в другой шаблон

<p class="exer_header" style="display: none;">  
    <image-input size="5" value="val1" /> 
</p> 
<p class="exer_header" style="display: none;">  
    <image-input size="5" value="val2" /> 
</p> 
<answers-img> 
    <answer-img class="imagednd_answer1" value="val1"/> 
    <answer-img class="imagednd_answer2" value="val2"/> 
</answers-img> 

и XSLT отл. здесь:

<xsl:template match="image-input"> 
    <xsl:variable name="id" select="generate-id(.)"/> 
    <xsl:element name="input"> 
     <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute> 
     <xsl:attribute name="class">exer_input</xsl:attribute> 
    </xsl:element> 
</xsl:template> 
<xsl:template match="answers-img"> 
     <xsl:for-each select="//image-input"> 
      <xsl:element name="div"> 
       <xsl:element name="input"> 
        <xsl:attribute name="class">ans_img_input</xsl:attribute> 
        <xsl:attribute name="type">hidden</xsl:attribute> 
        <xsl:attribute name="value">***{ID}***</xsl:attribute> 
      </xsl:element> 

       <xsl:apply-templates select="//answers-img/answer-img"/>     
      </xsl:element> 
     </xsl:for-each> 
</xsl:template> 

Вопрос следующий, как я могу послать переменную идентификатор из "входного" шаблона в другой "ответы-IMG" шаблон и изменить {ID} ?

UPD: В "ответ-IMG" Мне нужен тот же идентификатор о том, что сгенерированные в "ввода-IMG". Сначала xslt сгенерирует код с «input-img» (дважды), а когда где-то еще другие шаблоны, а не в «input-img», вызовите шаблон «answer-img». Может быть, я могу создать глобальную переменную массива?

ответ

0

Использование XSL: с-парам

Я не знаю, где вы хотите, чтобы вызвать шаблон, но это можно сделать так:

<xsl:call-template name="answers-img"><xsl:with-param name="id" select="$id" /></xsl:call-template> 

Вы должны добавить это в шаблон вызова:

<xsl:param name="id" /> 
0

Похоже, что ваш шаблон ответов-img зацикливается на вводе изображения, и вам нравится иметь тот же идентификатор, который используется в шаблоне ввода изображений. В этом случае вы можете создать идентификатор так же, как и в шаблоне ввода изображений.

<xsl:for-each select="//image-input"> 
    <xsl:variable name="id" select="generate-id(.)"/> 
..... 
<xsl:attribute name="value"><xsl:value-of select="$id"/></xsl:attribute> 

Это будет работать, потому что generate-id() будет создавать одинаковое значение для одного и того же элемента.

Update адресации конкретного вопроса:

Как я могу послать переменный идентификатор из «входного» шаблона в другой «ответы-IMG» шаблон и изменения {ID}?

Ответ: Вы не можете По крайней мере, не в вашем примере кода. Можно только передать значение от вызывающего (шаблона) к вызываемому (шаблон.)

Смежные вопросы