使用lxml有效地计算非常大的XML文档中的元素

时间:2012-05-22 13:35:32

标签: python xml lxml

我有一个非常大的(1.8GB)XML文档。我想简单地找到标记为<Product>的元素数量。

我到目前为止:

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

它有效,但有更快的方法吗?

1 个答案:

答案 0 :(得分:1)

由于这有效,我认为内存使用不是问题(iterparse 在内存中构建整个文件的树,除非你在迭代元素时修剪它) 。在这种情况下,省去在Python中迭代和计数的麻烦,让LXML / libxml在C中处理它:

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