Для немассивных .xmls (может быть, несколько мегабайт) способ, которым вы это делаете, должен быть нормальным, но если вы знаете тег и просто хотите получить значение в качестве выходного, я нашел способ сделать это, главным образом благодаряhttp://enginerds.craftsy.com/blog/2014/04/parsing-large-xml-files-in-python-without-a-billion-gigs-of-ram.html, но изменил его для моих нужд и даже не нуждается в xml.etree.Например:
path = 'yourxmlfilepath.xml'
tagyouwant='Headline' #just an example, i wanted the text between 'Headline' tags
opentag='<'+tagyouwant+'>'
closetag='</'+tagyouwant+'>'
with open(path,'rb') as inputfile:
for line in inputfile:
if opentag in line:
strtoget=str(line)
strtoget=strtoget.replace(opentag,"") #trimming the tags from the text
strtoget=strtoget.replace(closetag,"")
print strtoget
вместо окончательного оператора печати вы можете делать то, что вы хотите, со строкой, которую вы сейчас имеете.Кроме того, вы также можете запустить это как пакет или командную строку и вывести в .txt и сохранить все значения, как вы идете таким образом (на самом деле зависит от того, что вы хотите с ним делать).
В любом случае, я думалэто был умный, эффективный способ памяти для анализа огромных XML-файлов, когда вы точно знаете, что вы хотите из него извлечь.