2013-07-18 96 views
0

我有一個簡單的問題,我無法真正找到解決方法,我需要您的幫助。XSLT收集數據

主要的問題是,當處理輸入XML時,有各種需要「收集」信息的地方。這意味着我真正要做的就是調用帶有參數的特殊的模板,像這樣:

<xsl:template name="append-section"> 
     <xsl:param name="id" /> 
     <xsl:param name="title" /> 
     <!-- more code here --> 
</xsl:template> 

比方說在XSLT過程中,這個模板被稱爲12倍。在轉換結束時,我想將這些數據寫入文件。

我試圖將這些數據應用到全局變量,然後將結果寫入文件。僅僅意識到這些變量在XSLT中並不是真正的變量。此解決方案無效。

第二種解決方案是將xsl:result-document與一個臨時文件結合使用。這個解決方案會做類似的東西永遠是文件的以前的內容複製到自身,還追加了新的數據是這樣的:

<xsl:template name="append-section"> 
     <xsl:param name="id" /> 
     <xsl:param name="title" /> 
     <xsl:result-document method="html" href="tmp/tmp.html"> 

      <xsl:value-of select="document(tmp.html)" /> 
      <xsl:element name="li"> 
       <xsl:element name="a"> 
        <xsl:attribute name="class"> 
         <xsl:value-of select="'so-dropdown-page-menu-list-button'" /> 
        </xsl:attribute> 
        <xsl:attribute name="href"> 
         <xsl:value-of select="'#'" /> 
         <xsl:value-of select="$id" /> 
        </xsl:attribute> 
        <xsl:value-of select="$title" /> 
       </xsl:element> 
      </xsl:element> 
     </xsl:result-document> 
    </xsl:template> 

此代碼可能不是完美的,但我不得不不幸的是,實現引發以下異常:

Cannot write more than one result document to the same URI 

此解決方案似乎也無效。

所以我的問題是這樣的:我該如何實現這個簡單的問題?收集來自不同地方的數據,並在轉換結束時將它們寫入文件。

我使用撒克遜。

+0

告訴我們輸入XML的外觀,然後向我們顯示要構建或收集的相應HTML,然後我們可以建議一種XSLT方法。如果在一個樣式表中需要不同的處理步驟,您可能只想在模板上使用某種模式來收集信息,然後使用其他模式進行其他處理。 –

+0

我很確定這是不可能的,或者至少很難完成,我想如果有人可以提出一個通用的解決方案,其他人可能會發現它有幫助,必須有一種方法來實現這一點。 –

+0

如果你能向我們展示一個特定的場景,也許我們可以爲它提出一個通用的解決方案。 – JLRishe

回答

1

您需要根據輸出的結構而不是輸入的結構來構造代碼。當你在輸入中遇到信息時,不要試圖做事;當你需要生成相關的輸出時,請執行它們。

有些情況下,這可能看起來效率低下,因爲這意味着不止一次訪問相同的輸入。通常這些低效率將證明是明顯的而不是真實的。但第一件事是讓轉型工作;如果速度不夠快,可以用另一個問題來回答我們。

+0

經過一個良好的睡眠後,我實際上重新考慮了這個問題,並發現了一個簡單的解決方案,這要歸功於您的想法。再次感謝Micheal! –