<p>问题是您没有考虑XML名称空间。XML文档(以及其中的所有元素)位于<code>http://www.mediawiki.org/xml/export-0.7/</code>命名空间中。要想成功,你需要改变</p>
<pre><code>titles = document.findall('.//title')
</code></pre>
<p>到</p>
<pre><code>titles = document.findall('.//{http://www.mediawiki.org/xml/export-0.7/}title')
</code></pre>
<p>命名空间也可以通过<code>namespaces</code>参数提供:</p>
<pre><code>NSMAP = {'mw':'http://www.mediawiki.org/xml/export-0.7/'}
titles = document.findall('.//mw:title', namespaces=NSMAP)
</code></pre>
<p>这在Python2.7中有效,但在<a href="http://docs.python.org/2.7/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree.findall" rel="noreferrer">Python 2.7 documentation</a>中没有解释(更好的是<a href="http://docs.python.org/3.3/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree.findall" rel="noreferrer">Python 3.3 documentation</a>)。</p>
<p>另请参见<a href="http://effbot.org/zone/element-namespaces.htm" rel="noreferrer">http://effbot.org/zone/element-namespaces.htm</a>和这个带答案的SO问题:<a href="https://stackoverflow.com/q/14853243/407651">Parsing XML with namespace in Python via 'ElementTree'</a>。</p>
<hr/>
<p><a href="http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse" rel="noreferrer">^{<cd3>}</a>的问题是因为这个函数提供了<code>(event, element)</code>元组(而不仅仅是元素)。要获取标记名,请更改</p>
<pre><code>for e in etree.iterparse(file_name):
print e.tag
</code></pre>
<p>对此:</p>
<pre><code>for e in etree.iterparse(file_name):
print e[1].tag
</code></pre>