0
我有以下模板,嵌套循環。該模板生成多個xml文件的頁碼(例如:20個文件=我書中的章節)。編號從@ start = 4開始。 $ pagenr是頁面計數器。爲了更有效地計數,我將前一個文件的頁數保存在$ prevPage中。然後我只需在內部循環中添加xml文件中的頁數。 問題:它真的能像那樣工作嗎?或者是在內部循環中更新了$ prevPage計數? 當處理內循環中的指令時,我看到XMLSpy調試器跳出內循環到<xsl:variable name="prevPage" ....
行。在嵌套循環中計數:效率更高?
<xsl:template match="lat:numberGroup">
<xsl:variable name="start" select="@start"/>
<xsl:variable name="format" select="@format"/>
<!-- newnav.xml must not be processed here, as it is being created -->
<xsl:for-each select="lat:entry[not(@pagenr) or not(@pagenr = 'no')]">
<xsl:variable name="prevPage" select="number($start) + count((preceding-sibling::node())/document(lat:file)//lat:page)"/>
<xsl:variable name="actFile" select="lat:file"/>
<xsl:for-each select="document($actFile)//lat:page">
<li>
<a>
<xsl:variable name="pagenr" select="number($prevPage) + count(./preceding::lat:page )"/>
<xsl:attribute name="href">
<xsl:value-of select="tokenize($actFile,'\.')[1]"/>
.xhtml#pg
<xsl:value-of select="$pagenr"/>
</xsl:attribute>
<xsl:number value="$pagenr" format="{$format}"/>
</a>
</li>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
*跳回*可能是由XSLT處理器的延遲評估引起的。但是,由於XSLT *變量*只設置一次,之後永遠不會改變,隨後的任何後續跳回可能僅表明懶惰,並不代表實際的重新計算。 –
[我如何計算XSLT執行時間到毫秒級精度?](http://stackoverflow.com/questions/8783696/how-do-i-time-my-xslt-execution-times-to-millisecond -準確性) –