2013-05-06 3 views
0

Я использую java 6 и обрабатываю некоторые XML-документы, которые довольно большие ... Мне нужно разобрать их и изменить некоторые значения, а затем сериализовать обратно на диск.Какой самый быстрый способ десериализации и сериализации 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. 
+1

Насколько велика "большая"? 10K? 100K? Несколько гигабайт? –

ответ

3

You следует рассмотреть возможность использования 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

+0

Привет @dkaustubh, спасибо за ваш ответ! Я использовал таймер для записи того, сколько времени занимает каждая часть (например, преобразование из xml в dom, синтаксический анализ, сериализация). Сериализация занимает около 50 секунд в файле 90 КБ, что для меня не имеет никакого смысла ... Я не знаю, что не так с сериализационной частью ... –

+0

@ D.Q. Можете ли вы поделиться своим кодом с таймерами? – dkaustubh

+0

см. Обновление сообщения. –

1

Самый быстрый способ StAX. Самый простой способ - JAXB.

+1

vtd-xml на самом деле быстрее, чем StAx, он даже не закрыт –

2

Вы пытались использовать интерфейс SAX?

Если вам нужна действительно быстрая обработка очень больших документов xml, вам нужно избегать структуры DOM. Посмотрите на не-DOM анализаторами, как это:

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

0

50 секунд, чтобы сериализовать 90Kb сумасшествие. DOM медленный, но не такой медленный; что-то не так, и я не могу сказать, что.

Однако очень сложно описать 90Kb как «большой», и это неправильное описание могло повлиять на некоторые ответы.

Как быстро вам это нужно? Я предполагаю, что стандартные механизмы преобразования, такие как XSLT, достаточно быстр.

Другим важным фактором является то, какие именно изменения необходимо внести в контент? Многое зависит от сложности требуемой логики.

Смежные вопросы