擅长:python、mysql、java
<p>您可以使用xpath查找项,在find()中使用“special_node”属性作为必需的属性(和值)。我假设如果两个节点的所有属性都相同(例如类型、值、大小等),则确定两个节点是相同的<br/>
只是一个猜测</p>
<p>我的实现:</p>
<pre><code>import lxml.etree as etree
def isSameNode(a,b,tagsame=True):
for attrib in a.attrib:
if a.get(attrib) != b.get(attrib):
print a.get(attrib),b.get(attrib)
return False
else:
return False
if a.text != b.text:
return False
if tagsame==True:
if a.tag != b.tag:
return False
if a.prefix != b.prefix:
return False
if a.tail != b.tail:
return False
if a.values()!=b.values(): #may be redundant to the attrib matching
return False
if a.keys() != b.keys(): #may also be redundant to the attrib matching
return False
return True
def find_alike(xml,special_element,tagsame=True):
tree = etree.fromstring(xml)
for node in tree.iter():
if isSameNode(node,special_element,tagsame):
return node
return None
</code></pre>