如何使用 ElementTree 根据其他元素的值更改 XML 文件中元素的文本
How to change text of element in XML file based on values of other elements using ElementTree
我正在尝试使用 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>
这里
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>
我正在尝试使用 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>
这里
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>