Python ElementTree调用insert方法时子节点被重复添加问题求助
问题根因
你的代码执行了两次节点添加操作,导致节点重复出现:
- 调用
et.SubElement(firstcountrynode,"Capital")时,该API本身就会自动将新创建的Capital节点追加到firstcountrynode的子节点末尾,这就是父节点末尾多出节点的来源 - 后续又调用
firstcountrynode.insert(2,newnode)将同一个节点插入到索引为2的位置,最终出现两个相同节点
解决方案
两种可选实现方式,任选其一即可:
方案1:仅用insert实现指定位置插入,不使用SubElement
直接创建独立元素节点,仅执行一次插入操作:
tree = et.parse("testdata.xml") root = tree.getroot() firstcountrynode= root.find("country") # 直接创建节点,不自动挂载到父节点 newnode = et.Element("Capital") newnode.text = "Vaduz" # 单次插入到目标位置 firstcountrynode.insert(2, newnode) tree.write("testresult.xml")
方案2:使用SubElement,单独调整节点位置
如果习惯用SubElement创建节点,删除重复的insert逻辑,需要调整位置时先弹出末尾节点再插入:
tree = et.parse("testdata.xml") root = tree.getroot() firstcountrynode= root.find("country") # SubElement已经将节点追加到父节点末尾 newnode = et.SubElement(firstcountrynode,"Capital") newnode.text = "Vaduz" # 把末尾的节点移动到目标位置,不重复插入 firstcountrynode.insert(2, firstcountrynode.pop(-1)) tree.write("testresult.xml")
内容的提问来源于stack exchange,提问作者Hel
相关产品推荐
相关产品推荐

