<p>您所面临的“问题”不是存在多个<code>_gco_Date</code>元素,而是您的任务不是找到一个元素并对同一个元素执行某些操作。虽然您没有明确说明这一点(也不清楚文档可能有哪些可能的结构变化),但我可以将您的目标表述为:</p>
<blockquote>
<p>find and modify an element with tag <code>_gco_Date</code> that has a parent
(tagged _gmd_date?) which in turn has a sibling with a child having
<code>_gmd_CI_DateTypeCode</code> tag if and only if that latter tag has an
attribute 'codeListValue' equal to 'revision'.</p>
</blockquote>
<p>如果这是您需要的(或类似的),那么您必须使用文档结构,而不是简单地迭代元素,而不考虑元素的位置。element tree对象为您提供了实现此目标所需的一切(您可以获得父对象、子对象列表、同级列表等)。在</p>
<p>这是一个可以作为基础的原始示例(不是世界上最好的编码,只是一个原型!)公司名称:</p>
<pre><code>import lxml.etree
p=lxml.etree.ETCompatXMLParser()
p.feed(open("test.xml").read())
d=p.close()
def dt_rev(e):
"""this finds if 'e' has a child node with the right tag and attribute value codeListValue == revision """
for c in e.iterchildren():
if c.tag == "_gmd_CI_DateTypeCode" and c.attrib['codeListValue'] == 'revision':
return True
return False
for e in d.getiterator():
if e.tag == "_gco_Date":
p = e.getparent()
for s in p.itersiblings():
if dt_rev(s):
print ("found it!", e.text)
# add code here to modify the element "e" as needed
</code></pre>