簡體   English   中英

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

[英]What's the fastest way to deserialize and serialize an xml document?

我正在使用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.

您應該考慮使用StAX。 DOM在這里不合適。 您可以在此處查看比較。

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

您可以參考下面的URL以獲得示例代碼。

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

您是否嘗試過使用SAX接口?

如果需要真正快速處理非常大的xml文檔,則必須避開DOM結構。 看一下這樣的非dom解析器:

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

最快的方法是StAX。 最簡單的方法是JAXB。

50秒序列化90Kb太瘋狂了。 DOM很慢,但並不慢。 出了點問題,我無法分辨。

但是,將90Kb描述為“大”是嚴重的誤導,而且誤記可能會影響某些答案。

您需要多快? 我的猜測是,諸如XSLT之類的標准轉換機制已經足夠快。

另一個相關因素是,您需要對內容進行哪些更改? 在很大程度上取決於所需邏輯的復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM