Java 什么';反序列化和序列化xml文档的最快方法是什么?
我正在使用Java6处理一些相当大的xml文档…我需要解析它们并修改一些值,然后序列化回磁盘 我使用org.w3c.DOM对xml文档进行反序列化,并修改了一些属性值,还使用JAXP Transformer对已更改的DOM文档进行序列化。但是我发现它真的很慢 所以我想知道有没有更有效的方法来序列化dom文档或处理大型xml文档 更新: 我使用计时器记录每个部件所需的时间,以下是序列化:Java 什么';反序列化和序列化xml文档的最快方法是什么?,java,xml,dom,Java,Xml,Dom,我正在使用Java6处理一些相当大的xml文档…我需要解析它们并修改一些值,然后序列化回磁盘 我使用org.w3c.DOM对xml文档进行反序列化,并修改了一些属性值,还使用JAXP Transformer对已更改的DOM文档进行序列化。但是我发现它真的很慢 所以我想知道有没有更有效的方法来序列化dom文档或处理大型xml文档 更新: 我使用计时器记录每个部件所需的时间,以下是序列化: // serialize the updated DOM TransformerFactory transfo
// serialize the updated DOM
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
long t0 = timer.currentTimeMillis();
DOMSource source = new DOMSource(dom);
StreamResult result = new StreamResult(doc);
transformer.transform(source, result);
long t1 = timer.currentTimeMillis();
Reporter.log("Finished serializing " + doc.getAbsolutePath() + " in " + (((t1 - t0)) / 1000.0f) + " s.", true);
日志显示:
....
Finished serializing C:\Usrs\Adminstrator\Documents\Docs\InitialDocument_1.xml in 53 s.
你应该考虑使用StAX。DOM不适合这里。你可以在这里看到比较 您可以参考下面的URL获取示例代码
< P>你应该考虑使用StAX。DOM不适合这里。你可以在这里看到比较 您可以参考下面的URL获取示例代码
最快的方法是斯塔克斯。最简单的方法是JAXB。最快的方法是StAX。最简单的方法是JAXB。您尝试过使用SAX接口吗 如果您需要非常快速地处理非常大的xml文档,那么必须避免使用DOM结构。看看非dom解析器,如下所示:
您是否尝试过使用SAX接口 如果您需要非常快速地处理非常大的xml文档,那么必须避免使用DOM结构。看看非dom解析器,如下所示:
50秒来序列化90Kb是疯狂的。DOM很慢,但没有那么慢;出了点问题,我不知道是什么 然而,将90Kb描述为“大”是严重误导,这种错误描述可能影响了一些答案 你需要多快?我猜想XSLT等标准转换机制已经足够快了
另一个相关因素是,您需要对内容进行哪些更改?这在很大程度上取决于所需逻辑的复杂性。50秒来序列化90Kb是疯狂的。DOM很慢,但没有那么慢;出了点问题,我不知道是什么 然而,将90Kb描述为“大”是严重误导,这种错误描述可能影响了一些答案 你需要多快?我猜想XSLT等标准转换机制已经足够快了
另一个相关因素是,您需要对内容进行哪些更改?很大程度上取决于所需逻辑的复杂程度。多大是“大”?10公里?10万?几GB?大的有多大?10公里?10万?几GB?嗨@dkaustubh,谢谢你的回答!我使用了一个计时器来记录每个部分需要多长时间(例如,从xml到dom的转换、解析dom、序列化)。在一个90KB的文件上进行序列化大约需要50秒,这对我来说没有任何意义…我不知道序列化部分有什么问题…stax不太适合,它不构建对象模型,而且很难使用hi@dkaustubh,谢谢你的回答!我使用了一个计时器来记录每个部分需要多长时间(例如,从xml到dom的转换、解析dom、序列化)。在一个90KB的文件上序列化大约需要50秒,这对我来说没有任何意义…我不知道序列化部分出了什么问题…stax不太适合,它不构建对象模型,而且很难使用VTD xml实际上比stax快得多,它甚至不接近VTD xml实际上比stax快得多,它甚至不接近