我正在尝试使用Python ElementTree编辑XML文件。我需要我的代码将标记为“ from”的所有元素的文本替换为标记为“ to”的元素的文本值。值应在父元素内替换。
示例XML文件:
<note>
<letter>
<to>Tove</to>
<from>Jani</from>
</letter>
<letter>
<to>Mitch</to>
<from>Mcdeer</from>
</letter>
</note>
我的代码:
import os
import xml.etree.ElementTree as et
base_path = os.path.dirname(os.path.realpath(__file__))
xml_file = os.path.join(base_path, 'note.xml')
#print(xml_file)
tree = et.parse(xml_file)
root = tree.getroot()
for d in tree.findall('.//to'):
for e in tree.findall('.//from'):
e.text = d.text
tree.write('note1.xml')
预期结果:
<note>
<letter>
<to>Tove</to>
<from>Tove</from>
</letter>
<letter>
<to>Mitch</to>
<from>Mitch</from>
</letter>
</note>
实际结果:
<note>
<letter>
<to>Tove</to>
<from>Mitch</from>
</letter>
<letter>
<to>Mitch</to>
<from>Mitch</from>
</letter>
</note>
答案 0 :(得分:1)
这里
import xml.etree.ElementTree as ET
xml = '''<note>
<letter>
<to>Tove</to>
<from>Jani</from>
</letter>
<letter>
<to>Mitch</to>
<from>Mcdeer</from>
</letter>
</note>'''
root = ET.fromstring(xml)
letters = root.findall('.//letter')
for letter in letters:
letter.find('from').text = letter.find('to').text
ET.dump(root)
输出
<note>
<letter>
<to>Tove</to>
<from>Tove</from>
</letter>
<letter>
<to>Mitch</to>
<from>Mitch</from>
</letter>
</note>