Ho il seguente problema: Ho file XML molto grandi (come 300+ Meg), e ho bisogno di analizzarli per aggiungere alcuni dei loro valori al db. Anche la struttura di questi file è molto complessa. Voglio usare Stax Parser in quanto offre la possibilità di eseguire il pull-parsing (e quindi l'elaborazione) solo di parti del file XML alla volta, e quindi non caricare l'intera cosa in memoria, ma d'altra parte ottenere i valori con Stax (almeno su questi file XML) è ingombrante, ho bisogno di scrivere una tonnellata di codice. Da quest'ultimo punto di vista mi sarà di grande aiuto se potessi eseguire il marshalling del file XML su oggetti Java (come fa JAX-B), tuttavia questo caricherà tutto il file più una tonnellata di istanze Object in memoria tutte in una volta.Analisi di file XML di grandi dimensioni e marshalling su oggetti Java
La mia domanda è, c'è un modo per analizzare (o analizzare solo parzialmente) il file in modo sequenziale e quindi eseguire il marshalling solo di quelle parti sugli oggetti Java in modo che possa gestirle facilmente senza impattare sulla memoria?
Buono a sapersi risolvere il problema. Mi chiedo solo come è questo (soln in questo post) diverso da quello che ho postato? – Kashyap
Beh, onestamente era parte della paura di grandi quadri, in parte pigrizia :) (entrambi sono cattivi e deplorevoli). Prima di tutto, dalla documentazione EMF sembra una struttura abbastanza coinvolta, non è solo per l'elaborazione XML ma per un sacco di altre cose, e cerco sempre di evitare quadri così pesanti quando possibile (questa è solo una preferenza personale, non lo sono dire è male farlo in generale). In secondo luogo, sono pigro e l'EMF utilizza API di analisi XML non standard che non conosco, anche per questo motivo ho preferito la soluzione con le API Java XML standard. –
Infatti, che ti piacesse o meno l'EMF, ti ho raccomandato di NON usarlo ("** perché EMF è un martello troppo grande per un problema così piccolo. **") a meno che tu non abbia scelta. E a parte il parser, per citare di nuovo "così ** basta analizzare usando quello che vuoi **, creare uno StringStream o qualcosa per ogni in un ciclo e ** passare a JAX-B o EMF. **" –
Kashyap