in qualche modo legati a: libxml2 from javaperché l'analisi del sax è più rapida di quella del parsing? e come funziona stax?
sì, questa domanda è piuttosto prolisso - mi dispiace. Ho mantenuto è denso come mi sentivo possibile. Ho messo in evidenza le domande per rendere più facile sbirciare prima di leggere il tutto.
Perché l'analisi del sax è più rapida di quella del parsing? L'unica cosa che posso inventare è che w/sax stai probabilmente ignorando la maggior parte dei dati in arrivo, e quindi non sprecare tempo a elaborare parti dell'XML che non ti interessa. IOW: dopo aver analizzato w/SAX, non è possibile ricreare l'input originale. Se hai scritto il tuo parser SAX in modo che corrisponda a ogni singolo nodo xml (e possa così ricreare l'originale), allora non sarebbe più veloce di DOM?
Il motivo per cui sto chiedendo è che sto cercando di analizzare i documenti xml più rapidamente. Devo accedere all'intero albero xml DOPO l'analisi. Sto scrivendo una piattaforma per i servizi di terze parti da collegare, quindi non posso prevedere quali parti del documento xml saranno necessarie e quali parti no. Non conosco nemmeno la struttura del documento in arrivo. Questo è il motivo per cui non posso usare jaxb o sax. L'ingombro della memoria non è un problema per me perché i documenti xml sono piccoli e ho solo bisogno di 1 in memoria alla volta. È il tempo necessario per analizzare questo documento xml relativamente piccolo che mi sta uccidendo. Non ho usato stax prima, ma forse ho bisogno di indagare ulteriormente perché potrebbe essere la via di mezzo? Se ho capito bene, stax mantiene la struttura xml originale ed elabora le parti che chiedo a richiesta? In questo modo, il tempo di analisi originale potrebbe essere veloce, ma ogni volta che chiedo di attraversare una parte dell'albero che non ha ancora attraversato, è in quel momento che avviene l'elaborazione?
Se si fornisce un collegamento che risponde alla maggior parte delle domande, accetterò la risposta (non è necessario rispondere direttamente alle mie domande se hanno già risposto altrove).
aggiornamento: l'ho riscritto in sax e analizza i documenti su avg 2,1 ms. Questo è un miglioramento (16% più veloce) sopra i 2,5 ms che dom stava prendendo, tuttavia non è la grandezza che io (ed altri) avrei immaginato
Grazie
Direi che la domanda di quale è più veloce è irrilevante per i propri scopi, perché è necessario effettuare query arbitrarie contro l'albero. Ciò significa che devi costruire una rappresentazione dell'albero e avere un modo per creare query su di esso. Quindi o usi DOM/XPath, o scrivi i tuoi equivalenti. – Anon
Sospetto, tuttavia, che il tuo vero problema non sia SAX vs DOM in sé, ma in che modo il tuo sistema è configurato e/o in che modo stai accedendo ai dati. In realtà non dovrebbe richiedere molto tempo per analizzare un documento "piccolo" usando DOM (o uno degli equivalenti del DOM). Hai quantificato la differenza (che stai vedendo) tra SAX e DOM? – Anon
Ho quantificato l'approccio DOM. piccoli (circa 300k) documenti xml. L'implementazione corrente utilizza xerces-j e richiede circa 2,5 ms per documento xml su una macchina a 1,5 GHz. per quantificare il sax dipende in qualche modo dalla quantità di xml che si sceglie di conservare e da ciò che si fa con esso. hai ragione - non penso che il sax funzionerà per me - la domanda era più per curiosità. – andersonbd1