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>
  • 相关阅读:
    【血型】+【星座】准到吓人
    一落叶而知秋为什么有些树到冬天要落叶?
    WebDAV介绍
    Ruby concurrency explained
    lexus.cnblogs.com
    微博拉近了大家的距离
    High Performance Ruby Part 3: nonblocking IO and web application scalability
    Taglib确实减轻了开发负担[转]
    php中urldecode()和urlencode()起什么作用啊
    header中ContentDisposition的作用
  • 原文地址:https://www.cnblogs.com/dplearning/p/5801867.html
Copyright © 2011-2022 走看看