Java 转换表示为可写XML数据的高效性能方法
我正在研究一种实用方法,它允许将XML数据转换成格式化的Java 转换表示为可写XML数据的高效性能方法,java,xml,groovy,io,Java,Xml,Groovy,Io,我正在研究一种实用方法,它允许将XML数据转换成格式化的字符串,在您认为这对于javax.XML.transform.Transformer来说是一项微不足道的任务之前,让我解释一下我所面临的具体约束 转换开始时,输入数据不存在。实际上,它被表示为groovy.lang.Writeable()实例,我可以将其输出到任何java.io.Writer实例中。方法的签名如下所示: static String serializeToString(Writable source) 我目前的解决方案只涉及
字符串
,在您认为这对于javax.XML.transform.Transformer
来说是一项微不足道的任务之前,让我解释一下我所面临的具体约束
转换开始时,输入数据不存在。实际上,它被表示为groovy.lang.Writeable
()实例,我可以将其输出到任何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
可写
到字符串
(未格式化)String
到StreamSource
(这意味着将再次解析数据)StreamSource
到String
(格式化)GPathResult
实例转换为格式化字符串,该方法生成Writable
实例。不幸的是,无法指定StreamingMarkupBuilder
来生成格式化输出
更新#2:
我曾尝试过基于PipedWriter+PipedReader的实现,但实验并没有显示这种方法有多大的速度提升。看来这不是这个案子的关键问题 不知道“XML数据”的确切含义,但可以考虑将“尚未成为”的内容直接表示为SAXSource,从而传递“to string”和“parse string”步骤 为什么要解析刚才生成的XML字符串?因为我想得到格式化的输出(即缩进),而可写输出是未格式化的字符串。所以您希望它性能高效且美观?;)不能将可写文件更改为漂亮的格式吗?彼得,我同意美化可能对性能有害,但这是我的要求。我试图避免的是来回解析/序列化XML。我编辑了这篇文章,为这个实用方法增加了一些清晰度。正如我所说的,如果可写文件产生了您所需要的漂亮输出,那么就不需要解析它,也不会对性能造成太大影响(除了使XML比需要的更大之外)不幸的是,SAXSource基于InputStream或Reader,而我基本上从WriterNo开始,SAXSource有一个getXMLreader()方法。可以对其进行安排,以便XMLreader的parse()方法开始生成SAX事件。这些事件将直接取决于源对象的内部结构。根据,首先不可能更改XML的生成方式(请参阅我文章中的更新#1)。不过,如果您有一个GPathResult,在我看来,您应该能够导航它和generate SAXEvents。但是,我只是简单地重新阅读了裸Javadoc.Per,经过一点思考,我认为您的想法可能会有所帮助。我可以基于可写实例实现SAXSource(不确定这是否容易做到)。对于这个+1