擅长:python、mysql、java
<p>如果有人对用xml而不是lxml来做这些事情感兴趣(为什么要这样做),那么我就是如何解决这个问题的。在</p>
<p>根据来自</p>
<p><a href="http://effbot.org/zone/element.htm#accessing-parents" rel="nofollow noreferrer">http://effbot.org/zone/element.htm#accessing-parents</a></p>
<pre><code>import xml.etree.ElementTree as et
tree = et.parse(my_xmlfile)
root = tree.getroot()
access = root.find('access')
# ... snip ...
def iterparent(tree):
for parent in tree.getiterator():
for child in parent:
yield parent, child
# users = list of user-names that need new_group added
# iter through tupel and find the username
# alter xml tree when found
for user in users:
print "processing user: %s" % user
for parent, child in iterparent(access):
if child.tag == "name" and child.text == user:
print "Name found: %s" % user
parent.append(et.fromstring('<group>%s</group>' % new_group))
</code></pre>
<p>在这之后等倾翻(tree)显示树现在包含正确更改的用户子树,并添加了另一个group标记。在</p>
<p>注意:我不太确定为什么这样做,我只希望yield提供对树的引用,因此更改返回的父级yield会改变原始树。我的python知识还不足以确定这一点。我只知道这样对我有效。在</p>