Tengo que analizar un archivo XML de 1Gb con una estructura como la siguiente y extraer el texto dentro de las etiquetas "Autor" y "Contenido":usando lxml e iterparse() para analizar un gran archivo XML (+ - 1Gb)
<Database>
<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>
<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>
[...]
<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>
</Database>
Hasta ahora he intentado dos cosas: i) la lectura de todo el archivo y que pasan por allí con .find (xmltag) y ii) analizar el archivo XML con lxml y iterparse(). La primera opción que tengo funciona, pero es muy lenta. La segunda opción no he logrado despegarla.
Aquí es parte de lo que tengo:
for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
if element.tag == "BlogPost":
print element.text
else:
print 'Finished'
El resultado de eso es sólo espacios en blanco, sin texto en ellos.
Debo estar haciendo algo mal, pero no puedo entenderlo. Además, en caso de que no fuera lo suficientemente obvio, soy bastante nuevo en Python y es la primera vez que uso lxml. ¡Por favor ayuda!
Bueno, las etiquetas 'BlogPost' no parecen contener ningún texto en ellas. –
cierto. ¿Cuál sería la forma de obtener todo lo que está entre la etiqueta de apertura y cierre de BlogPost? – mvime
Si simplemente necesita toda la información de las etiquetas 'BlogPost', siga los consejos de andrew. Si lo quiere con formato HTML, aplique 'lxml.etree.tostring()' a ellos. –