2013-05-09 103 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}?

答案:您不能至少不在您的示例代码中。只能将来自呼叫者(模板)的值传递给被叫(模板)。

相关问题