今天突然发现了一个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 = "" 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 = ""
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>

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

  1. python爬虫中XPath和lxml解析库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  2. python中用ElementTree.iterparse()读取xml文件中的多层节点

    我在使用Python解析比较大型的xml文件时,为了提高效率,决定使用iterparse()方法,但是发现根据网上的例子:每次if event == 'end':之后elem.clear()或者是每次 ...

  3. python lxml库生成xml文件-节点命名空间问题

    lxml库,处理xml很强大,官方文档:https://lxml.de/tutorial.html#namespaces 例如: 我们要生成如下格式的报文: <ttt:jesson xmlns: ...

  4. python在lxml中使用XPath语法进行#数据解析

    在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...

  5. 转 web项目中的web.xml元素解析

    转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45)   阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...

  6. 【python】lxml查找属性为指定值的节点

    假设有如下xml在/home/abc.xml位置 <A> <B id=" name="apple"/> <B id=" name= ...

  7. Python 面试中可能会被问到的30个问题

    第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译.这样解释型语言每执行一次 ...

  8. 在.net中序列化读写xml方法的总结

    在.net中序列化读写xml方法的总结 阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命 ...

  9. struts2中改变struts.xml默认路径

    struts2.X配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下. 但是为了方便管理,开发人员把struts.xml放到其他位置,处理方法如下 ...

随机推荐

  1. [译] ASP.NET MVC 6 attribute routing – the [controller] and [action] tokens

    原文:http://www.strathweb.com/2015/01/asp-net-mvc-6-attribute-routing-controller-action-tokens/ 当在Web ...

  2. Maven 跳过测试目录

    在命令行使用 mvn install -Dmaven.skipTests 或 mvn install -Dmaven.test.skip=true 或在pom.xml设置 <build> ...

  3. .Net的要知道的一些事

    1.什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式? .Net是微软推出的框架 CLI是公共语言接口(规范) CLR是公共语言 ...

  4. 如何安装最新的 XFCE 桌面?

    导读 Xfce 是一款针对 Linux 系统的现代化轻型开源桌面环境,它在其他的类 Unix 系统上,比如 Mac OS X. Solaries. *BSD 以及其它几种上也能工作得很好.它非常快并以 ...

  5. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  6. Units Problem: How to read text size as custom attr from xml and set it to TextView in java code

    Here is this topic’s background: I defined a custom View which extends FrameLayout and contains a Te ...

  7. python项目在windows下运行出现编码错误的解法

    在启动文件里面加入 import sysreload(sys) sys.setdefaultencoding('GB2312') 这样在windows下调试运行神马的,就不会报错了. 当然发布时,建议 ...

  8. HTK学习2:工具使用

    选自:http://www.cnblogs.com/mingzhao810/archive/2012/08/03/2617674.html 这个是重点,呵呵,本部分会讨论到如下内容: 1. 建立语音材 ...

  9. Service错误

    错误日志:  Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act= ...

  10. Scala教程

    Scala表示可扩展性语言,是一种混合函数式编程语言.它是由Martin Odersky创建,并于2003年首次发布. Scala平滑地集成面向对象和函数式语言的特点,并且Scala被编译在Java虚 ...