JAXP Parser di un XML enorme

di harpefalcata il
7 risposte
Buongiorno a tutti.

Chiedo oggi lumi su come posso realizzare un parser XML.

Io dispongo di un file XML di dimensioni enormi, più di 730 MB, l'indice globale dei codici LEI.

Da questo file, devo estrarre solo i codici LEI, che sono delle semplici costanti numeriche di venti cifre.

Ho rovato ad usare come parser un JAXP, per la precisione questo: "http://www.mrwebmaster.it/java/xml-java-esempio-parsing-jaxp_7488_2.html".

Il problema è che l'applicazione, pur funzionando mi restituisce un errore di out of memory.

C'è qualcuno che mi sà aiutare? Come potrei risolvere?

Grazie

7 Risposte

  • Scrivendo banalmente il tuo parser. addirittura potrebbe bastarti grep e awk
  • Purtroppo non posso usare costrutti tipici di Linux, anche se mi piacerebbe perchè, questa applicazione la devo sviluppare per l'ufficio, e quindi andrà integrata su un'applicazione che si chiama livecycle, che gira solo sotto Windows.

    Periodicamente quindi, quando verranno aggiunti nuovi LEI, la banca dovrà parsare i nuovi file ed aggiornare i documenti.

    Se esistesse un modo di usare un equivalente di sed sotto windows, o in un'applicazione Java avrei risolto.

    Grazie
  • migliorabile ha scritto:


    @+m+ NON SERVE scrivere il parser, anche perche' NON E' cosi' banale!
    Bhè non so se è banale, ma un parser XML normalmente lo scrivo in 15 minuti.

    Tornando al resto: taglia un pezzetto dell'XML e caricalo da qualche parte, così vediamo.

    Se la struttura è questa allora anche meno di 15 minuti
    
    <LEIRecord><LEI>7245003LAUXH056OXW62</LEI><Entity><LegalName>Blom Industrial Products B.V.</LegalName><LegalAddress><Line1>Prof. Winternitzlaan 1</Line1><City>Laag-Soeren</City><Country>NL</Country><PostalCode>6957DM</PostalCode></LegalAddress><HeadquartersAddress><Line1>Prof. Winternitzlaan 1</Line1><City>Laag-Soeren</City><Country>NL</Country><PostalCode>6957DM</PostalCode></HeadquartersAddress><BusinessRegisterEntityID register="Kamer van Koophandel">30196154</BusinessRegisterEntityID><LegalForm>Besloten Vennootschap</LegalForm><EntityStatus>ACTIVE</EntityStatus></Entity><Registration><InitialRegistrationDate>2014-07-11T00:00:00.000+02:00</InitialRegistrationDate><LastUpdateDate>2016-07-14T08:43:40.504+02:00</LastUpdateDate><RegistrationStatus>ISSUED</RegistrationStatus><NextRenewalDate>2017-07-11T12:17:00.724+02:00</NextRenewalDate><ManagingLOU>724500A93Z8V1MJK5349</ManagingLOU></Registration></LEIRecord></LEIRecords>
  • @+m+ ed io, in 10 (o anche meno) secondi, ti fornisco un esempio che il tuo parser non supporta (SENZA andare a cercare cose particolarmente complicate )

    In ogni caso rimane il problema di fare il parsing ed analizzare 730 MB di XML.

    Il CVS e' un'alternativa valida.

    Uno lo puo' anche leggere come testo, ma si semplifica la vita da una parte, e se la complica da un'altra.
  • migliorabile ha scritto:


    @+m+ ed io, in 10 (o anche meno) secondi, ti fornisco un esempio che il tuo parser non supporta (SENZA andare a cercare cose particolarmente complicate )
    Scusa, ma hai idea di cosa sia un parser XML specifico per un singolo formato?
    Perchè ne ho fatti a centinaia, da piccoli a complessi.

    Detto questo...
    In ogni caso rimane il problema di fare il parsing ed analizzare 730 MB di XML.
    Non c'è nessun problema, se lo schema, come mi aspetto sia, è banale e simile a quello che ho messo sopra, basta un programma di poche righe che legga il file di testo linea per linea estraendo le informazioni utili.
    Per Delphi 15 minuti, per Java no so, ma non tanto di più.
    Il CVS e' un'alternativa valida.

    Uno lo puo' anche leggere come testo, ma si semplifica la vita da una parte, e se la complica da un'altra.
    E dove se la complica? Riconoscere un file di testo tipicamente banale come questo richiede un paio di minuti, con un programma eseguibile, forse un poco di più con Java con tutto l'overhead che si porta dietro.
Devi accedere o registrarti per scrivere nel forum
7 risposte