2010-12-03 131 views
1

我有一些XSLT,我沒有寫,但我必須保持它。在某些時候,它使用generate-id()來創建一個空的div,然後由腳本繼續操作。問題在於div是在另一個div內的(我認爲這有點無意義,但無論如何都可以接受),並且兩個都被賦予相同的ID!我用Xalan嘗試過,然後再用JRE變壓器得到相同的結果。然後,我嘗試使用Eclipse/Xalan的XSLT調試器,當我跨過的東西,這一切工作正常...爲什麼generate-id()函數返回兩次相同的id?

的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除非你提供一個完整的XML文檔(儘可能小)和一個完整的XSLT轉換(儘可能小)。請提供這些,或者你的問題不是真的可以回答的問題。 – 2010-12-03 17:23:05

+0

您發佈的XML片段是什麼?如果是這樣的結果,它並沒有用那個XSLT代碼生成,因爲那個用'id`生成`div`,但結果中沒有`div'。 – khachik 2010-12-03 17:27:39

回答

4

問題在於你沒有向我們展示的代碼。

generate-id()函數返回一個唯一標識符字符串爲自變量節點或上下文節點否則

因此,它對於獨特的節點是唯一的......您可能正在使用相同的上下文節點調用兩個​​內容模板中的p/0函數。這是可行的嗎?嗯......

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

call-template指令不改變上下文節點

相關問題