我正在使用lxml来修改xml。在下面的代码中,我想删除所有“标题”元素的子元素,并将子元素分配给其父元素。使用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)