我看起来好像您不需要程序中的任何DOM功能。我将第二次使用(c)ElementTree库。如果使用cElementTree模块的iterparse函数,则可以遍历xml并在事件发生时对其进行处理。
但是请注意,Fredriks关于使用cElementTree iterparse函数的建议:
要解析大型文件,您可以在处理完元素后立即删除它们:
for event, elem in iterparse(source): if elem.tag == "record": ... process record elements ... elem.clear()
上述模式有一个缺点。它不会清除根元素,因此最终将得到一个带有大量空子元素的单个元素。如果您的文件很大,而不只是很大,这可能是一个问题。要变通解决此问题,您需要动手使用root元素。最简单的方法是启用启动事件,并将对第一个元素的引用保存在变量中:
# get an iterablecontext = iterparse(source, events=("start", "end"))# turn it into an iteratorcontext = iter(context)# get the root elementevent, root = context.next()for event, elem in context: if event == "end" and elem.tag == "record": ... process record elements ... root.clear()
该lxml.iterparse()不允许这样。
前一个在Python 3.7上不起作用,请考虑以下方法来获取第一个元素。
import xml.etree.ElementTree as ET# get an iterablecontext = ET.iterparse(source, events=("start", "end"))is_first = Truefor event, elem in context: # get the root element if is_first: root = elem is_first = False if event == "end" and elem.tag == "record": ... process record elements ... root.clear()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)