我正在开发实用工具方法,允许将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:
为了提供更多的上下文,我使用生成GPathResult
实例的StreamingMarkupBuilder.bindNode()
方法将Writable
实例转换为格式化字符串。遗憾的是,无法指定StreamingMarkupBuilder
来生成格式化输出。
更新#2:
我尝试了基于PipedWriter + PipedReader的实现,但实验并没有显示出这种方法的大幅提升。在这种情况下看起来不是那么关键的问题。
答案 0 :(得分:1)
不知道“XML数据”究竟是什么意思,但你可以想到直接将“尚待”的东西表示为SAXSource,从而绕过“to-string”和“parse-string” “ 脚步。