Ho un file xml di grandi dimensioni che contiene molti elementi secondari. Voglio poter eseguire alcune query xpath. Ho provato a utilizzare vtd-xml in java, ma a volte mi viene fuori un errore di memoria, perché l'xml è così grande da adattarsi alla memoria. Esiste un modo alternativo per elaborare xml di grandi dimensioni.Elaborazione di file xml di grandi dimensioni
risposta
provare http://code.google.com/p/jlibs/wiki/XMLDog
esegue XPaths utilizzando sax senza creare rappresentazione in memoria di documenti XML.
è molto efficiente quando si lavora con file di grandi dimensioni
Non è possibile utilizzare XPath con un flusso SAX diretto (a meno di ripetere l'analisi dell'intero file per ogni query). –
@Glenn Maynard - ma sicuramente l'OP * deve * ripubblicare il file per ogni query (o batch di query). Il DOM è troppo grande per adattarsi alla memoria. –
Cosa stai cercando di fare in questo momento? Con il suono di esso si sta tentando di utilizzare un parser basato su DOM, che essenzialmente carica l'intero file XML in memoria come rappresentazione DOM. Se si ha a che fare con un file di grandi dimensioni, è preferibile utilizzare un parser SAX, che elabora il documento XML in modalità streaming.
Personalmente raccomando StAX per questo.
Hai usato VTD-xml standard vtd o esteso? Se usi XML esteso, hai la possibilità di usare la mappatura della memoria ... ci hai provato?
L'utilizzo di XPath potrebbe non essere una buona idea se si pianifica di compilare molte espressioni dinamicamente in un'applicazione longeva.
Non sono del tutto sicuro di come funziona la versione java di XPath, ma in .NET XPath compila un assembly dinamico quindi lo aggiunge al dominio dell'app. Gli usi successivi dell'espressione guardano l'assieme ora caricato in memoria.
In un caso, mentre stavo usando XPath, ho portato a una situazione in cui, a mio avviso, questo stesso tipo di meccanismo stava rallentando il riempimento della memoria simile a una perdita di memoria.
La mia teoria è che siccome ogni espressione è stata compilata utilizzando i valori dell'utente, ogni espressione compilata era probabilmente unica, quindi una nuova espressione è stata compilata e aggiunta al dominio dell'app.
Poiché è possibile rimuovere l'assembly dal dominio dell'app senza riavviare l'intero dominio dell'app, la memoria veniva consumata ogni volta che veniva valutata un'espressione e non poteva essere ripristinata. Di conseguenza, il codice stava perdendo memoria sotto forma di assembly in memoria e, dopo un po ', si conoscono i risultati.
- 1. Elaborazione di file xlsx di grandi dimensioni
- 2. NodeJS, promises, stream - elaborazione di file CSV di grandi dimensioni
- 3. Oracle: caricamento di un file xml di grandi dimensioni?
- 4. Visualizzazione di file XML di grandi dimensioni in eclissi?
- 5. creazione di file xml di grandi dimensioni in rubino
- 6. Analisi di file pseudo-xml di grandi dimensioni in python
- 7. Elaborazione di set di dati di grandi dimensioni tramite LINQ
- 8. Come convalidare file XML di grandi dimensioni (> 100 MB)
- 9. JAXB può analizzare file XML di grandi dimensioni in blocchi
- 10. Elaborazione su bitmap di grandi dimensioni (fino a 3 GB)
- 11. File JSON di grandi dimensioni
- 12. xmlstarlet sel su file di grandi dimensioni
- 13. Utilizzo del sottoprocesso.Popen per elaborazione con uscita di grandi dimensioni
- 14. Elaborazione di stringhe grandi, questa frammentazione di heap di oggetti di grandi dimensioni?
- 15. Lettura di documenti XML di grandi dimensioni in .net
- 16. Memorizzazione di XML di grandi dimensioni in MongoDB
- 17. Caricamenti di file di grandi dimensioni
- 18. PDFbox caricamento di file di grandi dimensioni
- 19. CodeIgniter Caricamento di file di grandi dimensioni
- 20. Elaborazione di un file .txt di grandi dimensioni in python in modo efficiente
- 21. Lettura di file XML di grandi dimensioni utilizzando StAX e XPath
- 22. elaborazione JAXB di sequenze XML
- 23. Android: scarica file di grandi dimensioni
- 24. Excel non apre file di grandi dimensioni
- 25. Supporto file di grandi dimensioni in C++
- 26. Come organizzare file di grandi dimensioni?
- 27. Xampp - PHPMyAdmin carica file di grandi dimensioni?
- 28. Leggi file di grandi dimensioni in parallelo?
- 29. Caricamento file di grandi dimensioni con WebSocket
- 30. Come posso dividere file di grandi dimensioni?
Perché il tag Python su questa domanda? Speri che le persone offrano soluzioni Python? – Spaceghost
Si verificano errori di memoria durante l'analisi del documento o quando si provano le query xpath? Se il secondo, forse il problema è con le query xpath. In entrambi i casi, hai provato ad aumentare il valore di -Xmx per heap per JVM? – Spaceghost
provare esteso vtd-xml e utilizzare l'opzione di mappatura della memoria –