zoukankan      html  css  js  c++  java
  • 【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>
  • 相关阅读:
    jQuery封装函数
    jquery中DOM
    phpstorm软件配置端口问题
    键盘控制div移动并且解决停顿问题(原生js)
    js实现可视化区域内拖拽
    一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
    js之鼠标随动后面跟随事件(类似于长龙跟着跑)
    js多物体运动之淡入淡出效果
    js实现网站首页分享滑块
    JS实现ul,li排序效果
  • 原文地址:https://www.cnblogs.com/dplearning/p/5801867.html
Copyright © 2011-2022 走看看