2010-12-03 5 views
1

は私が書いていないいくつかのXSLTを持っているが、私はそれを維持する必要があります。いくつかの点では、generate-id()を使って空のdivを作成し、それからスクリプトによってさらに操作されます。問題はdivが別のdivの中にあることです(私はこれがちょっと無意味だと思っていましたが、とにかく受け入れ可能です)、両方とも同じIDを与えられています!私はXalanでこれを試してみましたが、JRE変圧器を使って同じ結果を得ました。私は、Eclipseの/ XalanのXSLTデバッガを使用しようとしましたが、私は事をステップオーバーしていたときに、それはすべてが正常に動作します...なぜgenerate-id()関数は同じidを2回返すのですか?

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> 

これはちょっと複雑です - 何か手掛かりですか?お願いします?

+0

あなたの文はreproedすることはできませんコンテキストノードは変更されません。 XSLT変換(可能な限り)。これらを提供してください。そうでないと、あなたの質問は本当に答えられる質問ではありません。 –

+0

投稿したXMLフラグメントは何ですか?結果であれば、そのXSLTコードでは生成されていません。なぜなら、 'id'で' div'sを生成しますが、結果に 'div'がないからです。 – khachik

+0

@Dimitre - ok誰かが同じような状況でgenerate-idと似たようなことに遭遇したかもしれないと思った。 XMLとXSLTの両方が10k行以上実行されますが、私は最小限の例を作成します。 – jambox

答えて

4

問題は、あなたが私たちに示していないコードです。

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

だから、それは一意のノードの一意のです...あなたは、おそらく同じコンテキスト・ノードとの2つのコンテンツテンプレートのp/0関数を呼び出しています。これはどのようにして可能ですか?うーん...

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

call-template命令あなたは(可能な限り最小限のような)完全なXML文書と完全に提供しない限り、あなたは誤った結果を得る

+0

はい、それは正確でした!私がしなければならなかったのは、ノード名をgenerate-id(列挙された) - simplezのように追加することでした。何が私を投げたのは、Xalanがデバッグモードでどのように同じ動作をしなかったかでした!私はどこかのコンテキストでのいくつかの問題があると思います... – jambox

+0

@jambox:私はそれは参考になりましたうれしい、任意の時間を尋ねます。 –

関連する問題