Contar elementos de manera eficiente en un documento XML muy grande usando lxml

Tengo un documento XML muy grande (1.8 GB). Me gustaría simplemente encontrar la cantidad de elementos con la etiqueta <Product>.

Llegué hasta aquí:

context = etree.iterparse('./test.xml', tag='Product')
num_elems = 0
for event, elem in context:
    num_elems += 1
print num_elems

Funciona, pero ¿hay una forma más rápida de hacerlo?

preguntado el 22 de mayo de 12 a las 14:05

Creo que estás en el camino correcto, es solo que tienes un archivo xml grande. stackoverflow.com/questions/324214/… -

1 Respuestas

Como esto funciona, supongo que el uso de la memoria no es un problema (iterparse construya un árbol de todo el archivo en la memoria a menos que lo elimine mientras itera sobre los elementos). En ese caso, ahórrese la molestia de iterar y contar en Python y deje que LXML/libxml manejar eso en C:

tree = etree.parse("./test.xml")
num_elems = tree.xpath("count(//Product)")    # note: returns a float

contestado el 22 de mayo de 12 a las 14:05

¿Es esta una mejor manera, que el siguiente código: tree = etree.parse("./test.xml"); products = tree.findall("Product"); num_elems = len(products) if products is not None else None? - petr krampl

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.