1

作成しなかったXSLTがいくつかありますが、それを維持する必要があります。ある時点で、generate-id()を使用して空のdivを作成し、それをさらにスクリプトで操作します。問題は、divが別のdiv内にあり(これは少し無意味だと思っていましたが、とにかく受け入れられます)、両方に同じIDが与えられていることです!これをXalanで試した後、JREトランスフォーマーでもう一度試したところ、同じ結果になりました。次に、Eclipse / Xalan XSLTデバッガーを使用しようとしましたが、ステップオーバーすると、すべて正しく機能します...

XSLTは次のようになります。

<xsl:template match="listed">
    <xsl:variable name="showwhat">
        <xsl:call-template name="IdentifyAudience"/>
    </xsl:variable>
    <xsl:if test="string-length($showwhat) &gt; 0">
        <div>
            <xsl:attribute name="id">
                <xsl:value-of select="generate-id()"/>   
            </xsl:attribute>
            <xsl:call-template name="Blah"/>
            <xsl:apply-templates/>
        </div>
    </xsl:if>
</xsl:template>

そして、XMLフラグメントは次のようになります。

<listed id='ID39AF705AE17A000F337B000A' mode='html'>
    <ul>
        <li>Blah blah</li>
    </ul>
</listed>
<listed id='ID39AF715892AE000F337B002B' mode='html'>
    <ul>
         <li>Blech blech.</li>
    </ul>
</listed>

これは少し複雑だと思います-手がかりはありますか?お願いします?

4

1 に答える 1

4

問題は、あなたが私たちに見せていないコードにあります。

generate-id()関数は、引数ノードまたはコンテキストノードの一意の識別子文字列を返します。それ以外の場合は。

したがって、一意のノードに対して一意です...同じコンテキストノードを持つ2つのコンテンツテンプレートでp/0関数を呼び出している可能性があります。これはどのように可能ですか?上手...

<xsl:call-template name="Blah"/> 

call-template命令はコンテキストノードを変更しません

于 2010-12-03T18:44:05.837 に答える