我正在研究實用方法,該方法允許將XML數據轉換爲格式化的String
,並且在您認爲這是一項微不足道的任務之前,請讓我解釋具體的約束我遇到過。將XML數據表示爲可寫的性能高效的方式
輸入數據在轉換開始時不存在。實際上它代表了我可以輸出到任何java.io.Writer
實例中的groovy.lang.Writeable
(javadoc)實例。方法的簽名如下所示:
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:
爲了給多一點方面,我GPathResult
例如使用StreamingMarkupBuilder.bindNode()
方法產生Writable
實例轉換爲格式的字符串。不幸的是,沒有辦法指定StreamingMarkupBuilder
來產生格式化輸出。
更新#2:
我做了實驗依據PipedWriter + PipedReader但實驗實現沒有顯示出這種做法多少速度增益。看起來在這種情況下這不是關鍵問題。
爲什麼要解析剛剛生成的XML字符串? – 2011-04-04 15:47:16
因爲我想獲得格式化輸出(即縮進)和可寫輸出是未格式化的字符串。 – 2011-04-04 15:51:06
所以你想要它是性能高效和漂亮? ;)無法將可寫入內容更改爲漂亮格式? – 2011-04-04 15:53:07