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
相关产品推荐
相关产品推荐

