什么是反序列化和序列化xml文档的最快方法?

时间:2013-05-06 19:07:43

标签: java xml dom

我正在使用java 6并处理一些相当大的xml文档......我需要解析它们并修改一些值然后序列化回磁盘。

我使用org.w3c.DOM来反序列化xml文档并修改了一些属性值,并使用JAXP Transformer来序列化已更改的dom文档。但我发现它真的很慢......

所以我想知道是否有更有效的方法来序列化dom文档或处理大型xml文档?

更新

我使用计时器记录每个部分需要多长时间,下面是序列化:

// 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.

4 个答案:

答案 0 :(得分:3)

您应该考虑使用StAX。 DOM不适合这里。你可以在这里看到比较。

http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

您可以参考以下网址获取示例代码。

http://docs.oracle.com/javaee/5/tutorial/doc/bnbfl.html

答案 1 :(得分:2)

您是否尝试过使用SAX界面?

如果您需要非常快速地处理非常大的xml文档,则必须避开DOM结构。看看像这样的非dom解析器:

http://vtd-xml.sourceforge.net/

答案 2 :(得分:1)

最快的方式是StAX。最简单的方法是JAXB。

答案 3 :(得分:0)

50秒序列化90Kb是疯狂的。 DOM很慢,但不是那么慢;有些事情出了问题,我不知道是什么。

将90Kb描述为“大”是严重的误导,然而错误描述可能会影响一些答案。

你需要多快?我的猜测是XSLT等标准转换机制非常快。

另一个相关因素是,您需要对内容进行哪些更改?很大程度上取决于所需逻辑的复杂性。