2013-11-27 91 views
0

我們使用Xalan XSLT進行XSL轉換來生成HTML輸出,即XML + XSL = HTML。Xalan XSLT Stream輸出到瀏覽器的HTML輸出

以下是驗證碼。

out=response.getOutputStream(); 
TransformerFactory factory = TransformerFactory.newInstance(); 
Transformer transformer = factory.newTransformer() 
transformer.transform(new StreamSource(in), new StreamResult(out)); 

我不希望整個變換在數據顯示在瀏覽器中之前完成。我希望具有HTML輸出的StreamResult開始向瀏覽器發送數據,因爲它在各個XML節點/ XSL應用模板上執行xsl轉換,以便用戶可以獲得瀏覽器在瀏覽器上顯示的內容,因爲它可能會生成對於XML來說報表很大。

如何存檔? Xalan XSLT是否支持?其他的XSLT解析器是否支持它。

我希望你的建議。

回答

0

簡短的答案是否定的,Xalan不可能實現這一點。

編輯:但是,撒克遜擴展可能是可能的 - 看看它們。

至於較長的答案,XSLT處理器的流媒體功能已經取得了一些進展,但結果似乎太不可預測了。例如,請參閱此鏈接:http://www.balisage.net/Proceedings/vol5/html/Kay01/BalisageVol5-Kay01.html關於嘗試在Saxon中實施Streaming的討論。

假設的XSLT 3.0建議將接受這樣的疑問:

在這個版本的語言變化的主要目的是 使變換流模式來執行,其中 既不源文檔或結果文檔將永遠保存在整個內存中。

有關更多信息,請參閱http://www.w3.org/TR/xslt-30/。但這只是一個工作草案。

編輯:對於Xalan的特別流,邁克爾·凱寫道:

在Xalan的增量轉型實際上並沒有停止建設 整個源文件在內存中一棵樹;它所做的只是允許 樹與轉換過程並行構建。如果您需要流式轉換 ,Saxon-EE是您唯一實用的 選項。 [...]

這是取自Incremental/streaming XSLT transformations?,約會從2012.好像StreamSource不是流,真的。

+0

謝謝您的回覆。快速提問,那麼新的StreamSource(in),新的StreamResult(out)的目的是什麼?抱歉,我是XSLT新手。我認爲StreamSource(in)意味着XML可以流式傳輸,即通過標籤生成標籤,不是嗎?我假定StreamResult(out)會執行類似操作,即將HTML輸出視爲可用的流? Xalan中的「增量變換」實現了什麼?我會很感激你的迴應。 – user2101374

+0

請參閱我對此編輯的答案。 –

+0

理解,所以如果我正確讀取它,直到生成XML,輸出或結果HTML不能寫入瀏覽器,那麼正確?我的印象是,如果整個xml中的一個標記完成,轉換就可以開始,StreamResult(out)可以開始編寫對瀏覽器的響應,所以我錯了,我猜那是Saxon-EE?我會很感激你的建議。 – user2101374