Newsgroup: it.comp.java
Titolo: Parsing XML

Ciao a tutti,
devo fare il parsing di un documento XML che contiene un listino prezzi di
n articoli. Fin qui nulla di strano ho messo su un parser JDom in modo che
mi fornisca l' Xpath è tutto fila liscio, fintantochè non provo a
processare un file con dimensioni notevoli ca 3MB o superiore, il
programma termina con java.lang.OutOfMemoryError, ovvero ho colmato l'heap
della memoria...
Ora volevo trovare una soluzione per ovviare a questo problema, senza
perdere la potenza dell' Xpath o aumentare l'heap...
Stavo pensando di combinare il parser SAX e DOM insieme ovvero leggo 100
articoli con SAX e poi con DOM faccio la query... Qualcuno di voi ha
un'altra idea? Qualcuno sa dove poter trovare esempi per questo genere di
problema?
Grazie ciao
Ivan
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

L'unica cosa che mi viene in mente è Xerces o un parser analogo.
Il grosso probelma che ha JDOM e tutti i parser che usano la logica DOM
infatti è che deve prima caricare in memoria l'intero file.
Prova a mettere su una struttura asincrona di lettura e query con un buffer
per i dati.

Stelvio ha scritto:
Hai qualche sito dove posso trovare qualche cosa?



 problema?
:-) Eheh, questo uno degli aspetti tecnologici che la mia ditta ha 
affrontato e risolto per gli ultimi due anni. 
In due parole, se vuoi seguire quella strada, ti serve un XML database. Il 
nostro (XDB3.7 e presto 4.0) *costa* parecchio, ma supporta completamente 
queryies in XPath1.0 su volumi di dati estremamente grandi (dell'ordine di 
milioni di elementi). Ma non lo consiglio se non per applicazioni con 
..ritorni dello stesso ordine, dati i costi di licensing. ;-)
Ce ne sono pero' parecchi piu' o meno funzionanti e piu' o meno usabili in 
open source: ipedo, xhive, etc. 
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun

 open source: ipedo, xhive, etc. 
Il problema è che l'applicazione dovrà essere fornita a molti utenti con i
pc più strani ( è solo un interfaccia locale che genera XML da trasmettere
ad un server ) e non posso proprio far installare a tutti un DB XML (
Altrimenti mi lancerei subito su MySQL ).
Ciao


 
Mi sa che non hai molte scelte: "ti tocca" usare SAX puro :)
Cmq visto che si tratta tutto sommato di un listino prezzi non credo tu 
perda molto (non ho idea di come sia il formato dell'xml ma lo immagino 
molto lineare per questi scopi).
Se può consolarti in genere per scopi di "importazione" io utilizzo sempre 
da subito SAX, tanto è risaputo che prima o poi i dati aumentano (e xml è 
un formato già di per sè molto prolisso)...
ciao :-)
pole
-- 
Note: Some input words use a deprecated author.
Note: Read with -deprecation to understand.
http://web.tiscali.it/meridies

 pole
Si probabilmente prenderò quella strada, ma il problema sarà riuscire a
fare gli ordinamenti e le query sul XML.
Grazie ciao


 Altrimenti mi lancerei subito su MySQL ).
Beh se il problema è questo perché non usi HypersonicSql? Hai tutte le 
features di un db relazionale senza la necessità di doverlo installare sul 
client: te lo porti dietro come una normale libreria jar e se lo usi in 
modalità "in-process" non hai nemmeno bisogno di avviarlo con comandi 
esterni.
http://hsqldb.sourceforge.net/


 pole
Grazie Pole mi sembra proprio ciò che fa per me ora ho appena scaricato il
package per fare delle prove, e poi funziona con JDBC.
Grazie Ciao
