擅长:python、mysql、java
<p>ElementTree对于名称空间不是很聪明。您需要给<code>.find()</code>、<code>findall()</code>和<code>iterfind()</code>方法一个显式的名称空间字典。这没有很好的记录:</p>
<pre><code>namespaces = {'owl': 'http://www.w3.org/2002/07/owl#'} # add more as needed
root.findall('owl:Class', namespaces)
</code></pre>
<p>前缀仅在传入的<code>namespaces</code>参数中查找。这意味着您可以使用任何您喜欢的名称空间前缀;API分离<code>owl:</code>部分,在<code>namespaces</code>字典中查找相应的名称空间URL,然后更改搜索以查找XPath表达式<code>{http://www.w3.org/2002/07/owl}Class</code>。当然,您也可以自己使用相同的语法:</p>
<pre><code>root.findall('{http://www.w3.org/2002/07/owl#}Class')
</code></pre>
<p>如果您可以切换到<a href="http://lxml.de/" rel="noreferrer">^{<cd8>} library</a>更好;该库支持相同的ElementTree API,但在元素的<code>.nsmap</code>属性中为您收集命名空间。</p>