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 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>

次に質問です。「input」テンプレートから別の「answers-img」テンプレートに変数idを送信して{ID}を変更するにはどうすればよいですか?

UPD:「answer-img」では、「input-img」で生成されるのと同じidが必要です。最初に xslt が "input-img" (2 回) を使用してコードを生成し、"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 テンプレートが image-input をループしているように見えますが、image-input テンプレートで使用されているものと同じ 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() は常に同じ要素に対して同じ値を作成するため、これは機能します。

具体的な質問に対処する更新:

「input」テンプレートから別の「answers-img」テンプレートに変数 ID を送信して {ID} を変更するにはどうすればよいですか?

回答:少なくともサンプル コードではできません。呼び出し元 (テンプレート) から呼び出された (テンプレート) に値を渡すことだけが可能です。

于 2013-05-09T15:48:04.543 に答える