我有一个像这样的xml示例:
<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 ex。这里:
<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 发送到另一个“answers-img” 模板并更改 {ID} ?
UPD:在“answer-img”中,我需要在“input-img”中生成相同的 id 。首先xslt生成带有“input-img”(两次)的代码,当某个地方有另一个模板,而不是“input-img”时,调用模板“answer-img”。也许我可以创建全局数组变量?
答案 0 :(得分:0)
使用xsl:with-param
我不知道你想在哪里调用模板,但可以这样做:
<xsl:call-template name="answers-img"><xsl:with-param name="id" select="$id" /></xsl:call-template>
您必须将其添加到调用模板:
<xsl:param name="id" />
答案 1 :(得分:0)
有关如何使用call-template和param的更多详细信息,请访问 - http://www.w3schools.com/xsl/el_with-param.asp
答案 2 :(得分: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发送到另一个“answers-img”模板并更改{ID}?
答案:你不能至少不在你的示例代码中。只能将调用者(模板)中的值传递给被调用者(模板。)