2013-05-09 147 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> 

問題是下一步,我如何發送一個變量ID「輸入」模板到另一個「答案-IMG」模板,改變{ID}

UPD:在 「回答-IMG」 我需要生成 「輸入IMG」 相同ID的。首先xslt使用「input-img」(兩次)生成代碼,而當其他模板(不在「input-img」中)調用模板「answer-img」時。也許我可以創建全局數組變量?

回答

0

使用xsl:與-PARAM

我不知道你要撥打的模板,但它可以這樣做:

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

您必須添加此給調用模板:

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

看起來像您的answers-img模板正在循環顯示圖像輸入,並且您希望與圖像輸入模板中使用的id相同。在這種情況下,您可以像在圖像輸入模板中一樣創建id。

<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()將總是爲同一個元素創建相同的值。

更新解決具體問題:

我怎麼能發送從「輸入」模板中的變量ID爲另一種「答案-IMG」模板和變化{ID}?

答案:您不能至少不在您的示例代碼中。只能將來自呼叫者(模板)的值傳遞給被叫(模板)。

相關問題