<分区>
我正在使用 lxml 修改 xml。在下面的代码中,我想删除所有“标题”元素的子元素并将子文本分配给其父元素。
最初
<heading><whateverchildvalue>TEXTIWANT</whateverchildvalue></heading>
到
<heading>TEXTIWANT</heading>)
我尝试为此使用循环,但是不知何故,当我调用 node.remove(attr_children[0]) 时,它会跳出循环并继续下一次调用“ET.tostring(parsed)”(?)并没有修改第二个“标题”。要理解这一点,请删除“node.remove(attr_children[0])”并重新运行以下代码并比较之前打印的版本。我在这里做错了什么,以便它可以执行正确的循环,并将子文本分配给 xml 字符串中所有“标题”元素的“标题”父级?
xml_string="""
<note>
<to>Tove</to>
<mybigheader>
<heading><deleteme>Jani</deleteme></heading>
<heading><wantkey>Reminder</wantkey></heading>
</mybigheader>
<body>Don't forget me this weekend!</body>
</note>
"""
def modif_xml(xml_string):
parsed = ET.fromstring(xml_string)
for node in parsed.iter():
print "node is ", node
if "heading" in node.tag:
attr_children = node.getchildren()
for i in attr_children:
child_tag = i.tag
child_value = i.text
node.remove(attr_children[0])
node.text = child_value
my_xml = ET.tostring(parsed)
root = ET.XML(my_xml)
print ET.tostring(root, pretty_print=True)
modif_xml(xml_string)