我正在使用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.
答案 0 :(得分:3)
您应该考虑使用StAX。 DOM不适合这里。你可以在这里看到比较。
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html
您可以参考以下网址获取示例代码。
答案 1 :(得分:2)
答案 2 :(得分:1)
最快的方式是StAX。最简单的方法是JAXB。
答案 3 :(得分:0)
50秒序列化90Kb是疯狂的。 DOM很慢,但不是那么慢;有些事情出了问题,我不知道是什么。
将90Kb描述为“大”是严重的误导,然而错误描述可能会影响一些答案。
你需要多快?我的猜测是XSLT等标准转换机制非常快。
另一个相关因素是,您需要对内容进行哪些更改?很大程度上取决于所需逻辑的复杂性。