[英]Performance-effective way to transform XML data represented as Writeable
我正在研究允許將XML數據轉換為格式化的String
實用程序方法,在您認為這對於javax.xml.transform.Transformer
來說是一項微不足道的任務之前,讓我解釋一下我所面臨的特定約束。
轉換開始時,輸入數據不存在 。 實際上,它表示為groovy.lang.Writeable
( javadoc )實例,我可以將其輸出到任何java.io.Writer
實例中。 方法的簽名如下所示:
static String serializeToString(Writable source)
我當前的解決方案涉及幾個步驟,並且實際上提供了預期的結果:
StringWriter
,在那里輸出source
並轉換為String
javax.xml.transform.stream.StreamSource
實例(使用StringReader
) StringWriter
實例並將其包裝到javax.xml.transform.stream.StreamResult
javax.xml.transform.Transformer
實例執行轉換 StringWriter
轉換為String
雖然解決方案確實有效,但我對其效率並不滿意。 這種方法將非常經常使用,我想對其進行優化。 我要避免的是必須沿線執行多次轉換:
Writeable
String
(未格式化) String
到StreamSource
(這意味着將再次解析數據) StreamSource
到String
(格式化) 所以問題是,是否有可能建立消除不必要轉換的類似管道的流?
更新#1:
為了提供更多上下文,我正在使用StreamingMarkupBuilder.bindNode()
方法將GPathResult
實例轉換為格式化字符串,該方法生成Writable
實例。 不幸的是,無法指定StreamingMarkupBuilder
來產生格式化的輸出。
更新#2:
我曾經嘗試過基於PipedWriter + PipedReader的實現,但是實驗並未顯示出這種方法帶來的速度提升。 在這種情況下,這似乎不是關鍵問題。
不知道“ XML數據”到底是什么意思,但是您可以考慮將“尚待開發”的東西直接表示為SAXSource,從而繞過“ to-string”和“ parse-string”步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.