1

我有一个这样的 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 前。这里:

<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“input”模板发送到另一个“answers-img”模板并更改{ID}

UPD:在“answer-img”中,我需要在“input-img”中生成的相同id 。首先 xslt 使用“input-img”(两次)生成代码,当另一个模板不在“input-img”中时,调用模板“answer-img”。也许我可以创建全局数组变量?

4

3 回答 3

1

使用 xsl:with-param

我不知道你想在哪里调用模板,但可以这样做:

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

您必须将其添加到调用模板:

<xsl:param name="id" />
于 2013-05-09T15:33:44.780 回答
1

有关如何使用 call-template 和 param 的更多详细信息,您可以访问 - http://www.w3schools.com/xsl/el_with-param.asp

于 2013-05-09T15:39:42.600 回答
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 从“input”模板发送到另一个“answers-img”模板并更改 {ID}?

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

于 2013-05-09T15:48:04.543 回答