me siento más bien fuera de mi hacer esta pregunta, ya que a pesar de leer el official docs y los recursos vinculados en estas preguntas:Juega BodyParser Framework 2.0 - empuje analizar XML arroyos
How to understand `Iteratee` in play2?
Can't understand Iteratee, Enumerator, Enumeratee in Play 2.0
... Todavía soy bastante confuso sobre iteratees, enumeradores y el modelo reactivo de Play 2.0 en general. Pero de todos modos, me gustaría configurar un servicio web que me permita cargar archivos XML grandes (> 100MB), seleccionar ciertos NodeSeq específicos (no intercalados), procesarlos y transmitir los resultados al cliente.
Creo que lo primero que tengo que hacer es escribir un BodyParser que tome trozos de bytes, los introduzca en un analizador XML y emita un flujo de los NodeSeqs que deseo, digamos <doc>...</doc>
, de manera perezosa.
¿Alguien podría ofrecer alguna guía y/o ejemplos que ilustren cómo se podría lograr esto?
Actualización: Más de fondo: -
Mi XML es en realidad un documento Solr add
, por lo que parece:
<add>
<doc>
<field name="name">Some Entity</field>
<field name="details">Blah blah...</field>
...
</doc>
...
</add>
Quiero procesar cada <doc>
de manera streaming, por lo que mi parser obviamente tiene que esperar hasta que llegue a un evento de inicio <doc>
, almacenar todo hasta el evento final equivalente </doc>
, y emitir un NodeSeq del elemento completado, y luego purgar su búfer.
Cómo funciona esto con un Play BodyParser, no estoy del todo seguro. ¡Más actualizaciones si puedo aclarar aún más lo que quiero hacer!
Aunque el archivo XML completo es grande, cada elemento <doc />
por sí solo es bastante pequeño, aunque obviamente tendría que comprobar que el búfer de bytes no superara un determinado tamaño.
Es necesario rechunk adecuadamente sus NodeSeqs, ¿hay algún separador entre ellos? ¿Cómo sabes que un NodeSeq está completo? – Sadache
Hola @Sadache: espero haber aclarado mi pregunta al respecto, gracias por echar un vistazo. – Mikesname
Hola, ¿finalmente encontraste una solución? – Loic