2012-02-15 3 views
0

В настоящее время я использую EMf для чтения ~ 400 файлов xml. Каждый файл имеет около 100 000 строк и состоит из описательных данных (~ 10%, что-то вроде идентификаторов и ссылок на другие элементы) и реальных данных (~ 90%, длинных строк/текстов).Частично загружать XML-файл с помощью XMLBeans или EMF

Моя проблема в том, когда я читаю все файлы, получаю OutOfMemoryExceptions. Моя идея решить эту проблему: загружать только идентификаторы и т. Д., И если пользователь пытается получить доступ к данным, которые в настоящее время не загружены, они будут загружены в фоновом режиме.

Любая идея о том, как достичь этого с помощью EMF или XMLBeans?

редактировать:

мой XML имеет такую ​​структуру:

<A> 
<B> 
    <C></C> 
    <C></C> 
</B> 
<B> 
    <C></C> 
</B> 
</A> 

Я хочу, чтобы загрузить корневой узел в любом случае. В этом примере я хочу, чтобы пропустить узлы C, так что мое дерево объектов выглядит следующим образом

A 
|-B 
\-B 
+0

Absurd-Mind: Прошло около недели, и у вас есть только один ответ. Пожалуйста, примите мой ответ или уточните свой вопрос, чтобы получить больше ответов. –

ответ

0

Для больших файлов XML, вы гораздо лучше использовать потоковый XML парсер вместо одного, который читает весь файл в сразу и строит DOM от него. Последний и самый лучший способ сделать это - использовать StaX (Streaming API for XML) от Sun/Oracle. Возможно, вы слышали и о SAX.

+0

Как только вы достигнете интересующего вас элемента, вы можете создать XmlBean из этого местоположения, используя 'XmlObject.Factory.parse (xmlStreamReader)'. –

+0

Хорошая точка, Кевин. Лучшее обоих миров. –

+0

не уверен, что это то, что мне нужно –

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