转换表示为可写的XML数据的性能有效方法

时间:2011-04-04 15:43:51

标签: java xml groovy io

我正在开发实用工具方法,允许将XML数据转换为格式化的String,然后在你认为这是javax.xml.transform.Transformer的一项微不足道的任务之前让我解释一下我所遇到的具体限制面对。

转换开始时输入数据不存在。实际上它表示为groovy.lang.Writeablejavadoc)实例,我可以输出到任何java.io.Writer实例。方法的签名如下所示:

static String serializeToString(Writable source)

我目前的解决方案涉及很少的步骤,实际上提供了预期的结果:

  1. 创建StringWriter,在那里输出source并转换为String
  2. 根据此字符串创建javax.xml.transform.stream.StreamSource实例(使用StringReader
  3. 创建新的StringWriter实例并将其包装到javax.xml.transform.stream.StreamResult
  4. 使用javax.xml.transform.Transformer
  5. 的实例执行转换
  6. StringWriter转换为String
  7. 虽然解决方案确实有效,但我对其效率并不满意。这种方法将经常使用,我确实想要优化它。我想避免的是必须沿着这条线进行多次转换:

    1. WriteableString(未格式化)
    2. StringStreamSource(这意味着将再次解析数据)
    3. 再次从StreamSourceString(已格式化)
    4. 所以问题是,是否有可能建立类似管道的流程来消除不必要的转换?

      更新#1:

      为了提供更多的上下文,我使用生成GPathResult实例的StreamingMarkupBuilder.bindNode()方法将Writable实例转换为格式化字符串。遗憾的是,无法指定StreamingMarkupBuilder来生成格式化输出。

      更新#2:

      我尝试了基于PipedWriter + PipedReader的实现,但实验并没有显示出这种方法的大幅提升。在这种情况下看起来不是那么关键的问题。

1 个答案:

答案 0 :(得分:1)

不知道“XML数据”究竟是什么意思,但你可以想到直接将“尚待”的东西表示为SAXSource,从而绕过“to-string”和“parse-string” “ 脚步。