如何用Python为XML的每个country标签追加population节点并保存?
给XML中所有节点追加节点的解决方案
原代码的问题
你的代码存在几个关键错误:
- 混用了
lxml.etree和标准库xml.etree.ElementTree的API,容易引发兼容性问题 root[0][0].append(...)错误地将字符串追加到第一个<country>的子节点<rank>内部,而非<country>节点下- 直接追加字符串不是合法的XML元素操作,必须创建Element对象
- 缺少将修改后的内容保存回文件的步骤
修正后的代码
import lxml.etree as ET # 解析目标XML文件 parser = ET.XMLParser(recover=True) tree = ET.parse('country_data.xml', parser=parser) root = tree.getroot() # 遍历所有<country>节点,逐个添加<population>子节点 for country in root.findall('country'): # 创建<population>元素并设置文本内容 population_node = ET.Element('population') population_node.text = '2318921212' # 将新元素追加到当前<country>节点下 country.append(population_node) # 保存修改后的XML到原文件,保留格式美观 tree.write( 'country_data.xml', encoding='utf-8', xml_declaration=True, pretty_print=True )
代码说明
- 遍历目标节点:通过
root.findall('country')精准获取所有<country>节点,确保每个国家都被处理 - 创建合法元素:使用
ET.Element()生成标准XML元素,避免直接拼接字符串导致的格式错误 - 保存文件:
tree.write()方法负责将修改后的XML树写入原文件,pretty_print=True保证输出格式与原文件一致,可读性强 - 统一API:全程使用
lxml.etree的接口,避免不同XML解析库的冲突
内容的提问来源于stack exchange,提问作者qcoder
相关产品推荐
相关产品推荐

