Tengo un archivo xml grande que contiene muchos elementos secundarios. Quiero poder ejecutar algunas consultas xpath. Intenté usar vtd-xml en java, pero a veces salgo del error de memoria porque el xml es tan grande que cabe en la memoria. ¿Hay alguna forma alternativa de procesar tales xml's grandes?Procesando archivos xml grandes
Respuesta
tratar http://code.google.com/p/jlibs/wiki/XMLDog
se ejecuta utilizando XPaths saxo sin crear representación en memoria de los documentos XML.
es muy eficiente cuando se trabaja con archivos de gran tamaño
No puede usar XPath con una transmisión SAX directa (excepto volver a analizar todo el archivo para cada consulta). –
@Glenn Maynard - pero seguramente el OP * tiene que * volver a analizar el archivo para cada consulta (o lote de consultas). El DOM es demasiado grande para caber en la memoria. –
¿Qué está tratando de hacer ahora mismo? Por lo que suena, estás tratando de usar un analizador basado en DOM, que esencialmente carga todo el archivo XML en la memoria como una representación DOM. Si está tratando con un archivo grande, será mejor que utilice un analizador SAX, que procesa el documento XML de forma continua.
Yo personalmente recomiendo StAX para esto.
¿Utilizaste vtd estándar o VTD-xml extendido? Si usa XML extendido, entonces tiene la opción de usar la asignación de memoria ... ¿lo intentó?
Usar XPath podría no ser una muy buena idea si planea compilar muchas expresiones dinámicamente en una aplicación de larga duración.
No estoy del todo seguro de cómo funciona la versión Java de XPath, pero en .NET XPath compila un ensamblaje dinámico y luego lo agrega al dominio de la aplicación. Los usos posteriores de la expresión miran el conjunto ahora cargado en la memoria.
En un caso, donde estaba usando XPath me llevó a una situación en la que, creo, este mismo tipo de mecanismo se ralentizaba llenando la memoria de forma similar a una pérdida de memoria.
Mi teoría es que a medida que cada expresión se compilaba utilizando los valores del usuario, cada expresión compilada era probablemente única, por lo que se compilaba y agregaba una nueva expresión al dominio de la aplicación.
Dado que puede eliminar el ensamblaje del dominio de la aplicación sin reiniciar todo el dominio de la aplicación, la memoria se consumía cada vez que se evaluaba una expresión y no se podía recuperar. Como resultado, el código goteaba memoria en forma de ensamblajes en la memoria, y después de un tiempo, usted conoce los resultados.
- 1. Procesando grandes cantidades de datos usando multiprocesamiento
- 2. creando archivos grandes xml en ruby
- 3. Problemas con los GRANDES archivos XML
- 4. ¿Visualizar archivos XML grandes en eclipse?
- 5. Analizando archivos pseudo-xml grandes en python
- 6. ¿Generar archivos XML muy grandes en Python?
- 7. Procesando archivos enormes en C#
- 8. ¿Cómo uso Nokogiri :: XML :: Reader para analizar grandes archivos XML?
- 9. Procesando archivo xlsx grande
- 10. Cómo combinar grandes archivos XML utilizando MSXML SAX en Delphi
- 11. Analizando archivos XML muy grandes y clasificándolos en objetos Java
- 12. Visor de XML liviano que puede manejar archivos grandes
- 13. Resharper con archivos grandes o * muy * grandes
- 14. Oscilación Archivos grandes Rendimiento
- 15. Subidas de archivos grandes
- 16. java: ¿escribir archivos grandes?
- 17. CodeIgniter Cargando archivos grandes
- 18. Procesando correo electrónico entrante
- 19. La división de grandes archivos XML en los archivos de sub sin la contención de memoria
- 20. Procesando un conjunto grande de archivos pequeños con Hadoop
- 21. Rechazar archivos grandes en git
- 22. Android: descarga de archivos grandes
- 23. ¿Fread falla para archivos grandes?
- 24. Dividir archivos grandes usando PHP
- 25. ¿Cómo puedo dividir archivos grandes?
- 26. Cómo transmitir archivos grandes usando JAXB Marshaller?
- 27. Procesando texto con elisp
- 28. JAVA - Mejor enfoque para analizar archivos JSON grandes (extra grandes)
- 29. Cómo precomprimir archivos html muy grandes
- 30. Procesando archivo de texto grande en C#
¿Por qué la etiqueta Python tiene esta pregunta? ¿Esperas que las personas ofrezcan soluciones de Python? – Spaceghost
¿Tiene errores de memoria insuficiente al analizar el documento o cuando intenta consultas xpath? Si es el segundo, tal vez el problema sea con las consultas xpath. De cualquier manera, ¿intentó aumentar el valor de -Xmx para Heap para la JVM? – Spaceghost
intente extendido vtd-xml y utilice la opción de mapeo de memoria –