Tengo un archivo XML gigantesco (4GB) que actualmente estoy dividiendo en fragmentos con la función de "división" de Linux (cada 25,000 líneas, no por bytes). Esto generalmente funciona muy bien (termino con unos 50 archivos), excepto que algunas de las descripciones de datos tienen saltos de línea, y con tanta frecuencia los archivos de fragmentos no tienen las etiquetas de cierre correctas, y mi analizador se ahoga a mitad del proceso.¿Cómo usar linux csplit para cortar archivos XML masivos?
Ejemplo archivo: (nota: normalmente cada una "lista" nodo XML se supone que es en su propia línea)
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<listing><date>2009-09-22</date><desc>This is a description WITHOUT line breaks and works fine with split</desc><more_tags>stuff</more_tags></listing>
<listing><date>2009-09-22</date><desc>This is a really
annoying description field
WITH line breaks
that screw the split function</desc><more_tags>stuff</more_tags></listing>
</listings>
Entonces a veces mi puntas abiertas arriba como
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<listing><date>2009-09-22</date><desc>This is a description WITHOUT line breaks and works fine with split</desc><more_tags>stuff</more_tags></listing>
<listing><date>2009-09-22</date><desc>This is a really
annoying description field
WITH line breaks ...
EOF
Así - He estado leyendo sobre "csplit" y parece que podría funcionar para resolver este problema. Me parece que no puede obtener la expresión regular correcta ...
Quiero básicamente la misma salida de archivos ~ 50ish
Algo así como:
*csplit -k myfile.xml '/</listing>/' 25000 {50}
Cualquier ayuda sería grande Gracias!
Gracias por la sugerencia, sin embargo, en mis trozos agrego en la primera línea y/o la última línea para cerrar la etiqueta principal * lisings "para que cada subarchivo sea válido. He estado haciendo esto por un tiempo y funciona bien agregar esas líneas después de th e dividido – Fred
Eres familiar con Java, VTD-XML extendido te da la flexibilidad para dividir el documento usando XPath, mira el ejemplo a continuación http://snippets.dzone.com/posts/show/11269 –