You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用lxml迁移XML元素时重复标签问题解决

解决XML处理中重复country标签的问题

你的核心问题是重复创建了country节点:脚本循环中先通过etree.SubElement(new_root,'country')生成一个空的外层country,再把原XML中的country节点追加进去,导致两层country标签嵌套。etree.strip_tags之所以无效,是因为它的作用是移除指定标签并保留其内容,而这里的问题是结构错误,不是需要清理多余标签。


解决方案1:直接移动原节点(无需复制)

如果不需要保留原XML树的结构(仅需生成输出文件),可以直接将原country节点添加到新根节点,跳过额外创建外层country的步骤:

from lxml import etree

tree = etree.parse(r'countries.xml')
root = tree.getroot()

new_root = etree.Element('NewData')

for country in root.iter('country'):
    # 直接将原country节点挂载到新根节点,避免嵌套
    new_root.append(country)

with open('output.xml', 'wb') as f:
    f.write(etree.tostring(new_root, pretty_print=True, xml_declaration=True, encoding='UTF-8'))

解决方案2:复制节点(保留原XML树)

如果需要保留原XML树的完整性(后续还要操作原树),则需要复制每个country节点及其子结构:

from lxml import etree
import copy

tree = etree.parse(r'countries.xml')
root = tree.getroot()

new_root = etree.Element('NewData')

for country in root.iter('country'):
    # 深拷贝节点,避免修改原XML树
    copied_country = copy.deepcopy(country)
    new_root.append(copied_country)

with open('output.xml', 'wb') as f:
    f.write(etree.tostring(new_root, pretty_print=True, xml_declaration=True, encoding='UTF-8'))

验证结果

两种方案生成的output.xml都会和你预期的结构一致,不会出现嵌套的country标签。

内容的提问来源于stack exchange,提问作者Tyler Knaup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:03:10