擅长:python、mysql、java
<p>正如Chris已经提到的,您还可以使用lxml和xpath。由于xpath不允许您像<code>{http://www.openarchives.org/OAI/2.0/}record</code>(所谓的“James Clark notation”*)那样完整地编写名称空间名称,因此您必须使用前缀,并为xpath引擎提供一个前缀到名称空间uri映射。在</p>
<p>以lxml为例(假设您已经拥有所需的<code>tree</code>对象):</p>
<pre><code>nsmap = {'oa':'http://www.openarchives.org/OAI/2.0/',
'dc':'http://purl.org/dc/elements/1.1/'}
tree.xpath('//oa:record[descendant::dc:publisher[contains(., "Alamos")]]',
namespaces=nsmap)
</code></pre>
<p>这将选择具有包含单词“Alamos”的子元素<code>{http://purl.org/dc/elements/1.1/}dc</code>的所有<code>{http://www.openarchives.org/OAI/2.0/}record</code>元素。在</p>
<p>[*]这来自于一个<a href="http://www.jclark.com/xml/xmlns.htm" rel="noreferrer">article</a>,其中James Clark解释了XML名称空间,不熟悉名称空间的每个人都应该阅读本文!(即使是很久以前写的)</p>