【python】lxml中多个xml采用相同节点时出现的问题

今天突然发现了一个lxml的坑。

假设我们有一个节点

<id>123</id>

有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错!

 

出错例子:

#!/usr/bin/env python
#encoding:utf8

from lxml import etree

if __name__ == "__main__":
    
    root1 = etree.Element("root1")  #根节点1
    root2 = etree.Element("root2")  #根节点2
    ver_node = etree.Element("id")  #子节点
    ver_node.text = "123"
    
    root1.append(ver_node)  #都加入了同一个子节点
    root2.append(ver_node)
    
    print etree.tostring(root1, pretty_print=True, xml_declaration=True, encoding='UTF-8')
    print etree.tostring(root2, pretty_print=True, xml_declaration=True, encoding='UTF-8')

结果:

<?xml version='1.0' encoding='UTF-8'?>
<root1/>

<?xml version='1.0' encoding='UTF-8'?>
<root2>
  <id>123</id>
</root2>

只有后面一个有子节点,前面一个没有!

 

 

正确写法:

#!/usr/bin/env python
#encoding:utf8
from lxml import etreeimport copy

if __name__ == "__main__":
    root1 = etree.Element("root1")
    root2 = etree.Element("root2")
    ver_node1 = etree.Element("id")
    ver_node1.text = "123"
    ver_node2 = copy.deepcopy(ver_node1) #深拷贝!
    
    root1.append(ver_node1)
    root2.append(ver_node2)
    
    print etree.tostring(root1, pretty_print=True, xml_declaration=True, encoding='UTF-8')
    print etree.tostring(root2, pretty_print=True, xml_declaration=True, encoding='UTF-8')

结果:

<?xml version='1.0' encoding='UTF-8'?>
<root1>
  <id>123</id>
</root1>

<?xml version='1.0' encoding='UTF-8'?>
<root2>
  <id>123</id>
</root2>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值