擅长:python、mysql、java
<p>您也许可以使用<a href="http://effbot.org/zone/element-iterparse.htm" rel="nofollow">ET.iterparse</a>来增量解析XML块:</p>
<pre><code>import xml.etree.ElementTree as ET
chunks = iter([
'<root>'
'<el a="1" b=',
'"2"><sub c="',
'3">test</sub',
'></el><el d=',
'"4" e="5"></',
'el>',
'</root>'
])
class Source(object):
def read(self, size):
# Replace this with code that reads XML chunks from the server
return next(chunks)
for event, elem in ET.iterparse(Source(), events=('end', )):
if elem.tag == 'el':
print(elem)
# handle_element(elem)
</code></pre>
<p>收益率</p>
^{pr2}$
<p><code>ET.iterparse</code>的第一个参数通常是文件名或拜特西奥或StringIO对象。但是,它可以是任何具有<code>read</code>方法的对象。因此,如果您创建了一个对象,其read方法从服务器读取,那么您可以将其挂接到<code>ET.iterparse</code>中执行增量解析。在</p>
<p>注意,<code>ET.iterparse</code>将使用请求的字节数调用read方法(例如<code>read(16384)</code>)。如果服务器只提供给你更少的字节,那么你可以返回更少的字节,但是我不确定如果你返回的字节数超过了请求的字节数,是否会发生什么不好的事情。理想情况下,您应该能够将请求的字节数传递给服务器,并依赖服务器提供正确的字节数(或更少)。在</p>