Tengo el siguiente problema: Tengo archivos XML muy grandes (como más de 300 Megas), y necesito analizarlos para agregar algunos de sus valores a la base de datos. La estructura de estos archivos también es muy compleja. Quiero usar Stax Parser, ya que ofrece la buena posibilidad de extraer-analizar (y así procesar) solo partes del archivo XML a la vez, y así no cargar todo en la memoria, pero por otro lado obtener los valores con Stax (al menos en estos archivos XML) es engorroso, necesito escribir toneladas de código. Desde este último punto de vista, me será de gran ayuda si pudiera ordenar el archivo XML en objetos Java (como lo hace JAX-B), pero esto cargaría todo el archivo más una tonelada de instancias de objetos en la memoria, todo a la vez.Analizando archivos XML muy grandes y clasificándolos en objetos Java
Mi pregunta es, ¿hay alguna forma de analizar (o solo analizar parcialmente) el archivo secuencialmente, y luego ordenar solo esas partes en objetos Java para que pueda manejarlas fácilmente sin atascarme la memoria?
Es bueno saber que su problema está resuelto. Me pregunto cómo es esto (Soln en esta publicación) diferente de lo que he publicado? – Kashyap
Bueno, sinceramente, era parte del miedo a los grandes frameworks, parte de pereza :) (ambos son malos y lamentables). En primer lugar, de la documentación EMF parece un marco bastante complicado, no es solo para el procesamiento de XML sino para muchas otras cosas, y siempre trato de evitar marcos tan pesados siempre que sea posible (esto es solo preferencia personal, no soy decir es malo hacerlo en general). En segundo lugar, soy flojo y el EMF utiliza API de análisis XML no estándar que no conozco, por lo que también preferí la solución con las API Java XML estándar. –
De hecho, tanto si le gustaron los campos electromagnéticos como si no, le recomendé NO usarlo ("** porque los campos electromagnéticos son demasiado grandes para un problema tan pequeño. **") a menos que no tenga otra opción. Y abt el analizador sintáctico, para citar nuevamente "así que ** simplemente analice usando lo que quiera **, cree algo de StringStream o algo por cada en un bucle y ** pase a JAX-B o EMF. **" –
Kashyap