【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 = "" 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采用相同节点时出现的问题的更多相关文章
- python爬虫中XPath和lxml解析库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- python中用ElementTree.iterparse()读取xml文件中的多层节点
我在使用Python解析比较大型的xml文件时,为了提高效率,决定使用iterparse()方法,但是发现根据网上的例子:每次if event == 'end':之后elem.clear()或者是每次 ...
- python lxml库生成xml文件-节点命名空间问题
lxml库,处理xml很强大,官方文档:https://lxml.de/tutorial.html#namespaces 例如: 我们要生成如下格式的报文: <ttt:jesson xmlns: ...
- python在lxml中使用XPath语法进行#数据解析
在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...
- 转 web项目中的web.xml元素解析
转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45) 阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...
- 【python】lxml查找属性为指定值的节点
假设有如下xml在/home/abc.xml位置 <A> <B id=" name="apple"/> <B id=" name= ...
- Python 面试中可能会被问到的30个问题
第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译.这样解释型语言每执行一次 ...
- 在.net中序列化读写xml方法的总结
在.net中序列化读写xml方法的总结 阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命 ...
- struts2中改变struts.xml默认路径
struts2.X配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下. 但是为了方便管理,开发人员把struts.xml放到其他位置,处理方法如下 ...
随机推荐
- mybaties # , $
mybaties会对#引入的值加上双引号, 如: #{buildingName} -------->"buildingName";mybaties会将$引入的值直接显示到sq ...
- AlwaysOn可用性组功能测试(一)--AlwaysOn故障转移测试
具体测试环境请参考: AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建 AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL) 一. Alw ...
- 给一系列的div中的第一个添加class
$(".lb:first").addClass("active")
- mongodb university week4
1.index Creation,background 如果在foreground运行index,会阻塞其他writer,如果background运行,会比较慢,但不会阻塞其他writer,可以并发写 ...
- Entity Framework 之Database first(数据库优先)&Model First(模型优先)
一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...
- 4. Linux常用命令
1. ls 查看当前目录信息 2. pwd 查看当前目录 3. cd 切换目录 快捷操作:cd - 可快速对最近的两个目录切换, cd 或者cd~ 直接回到用户自己的主目录, 4. hwclock ...
- r-cnn学习系列(三):从r-cnn到faster r-cnn
把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn. RCNN 输入图像,使用selective search来构造 ...
- Struts2 Action 动态传参数
Struts2的两个Action之间传参的问题. 需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面. 1.使用r ...
- php之CI框架多语言的用法
public function index() { // 加载语言包,可以加载多个 $this->lang->load('email'); echo $this->lang-> ...
- TortoiseSVN使用方法
1.初始化本地SVN目录,在某个文件夹鼠标右键点击. 初始化后目录 2.将某个目录下代码,添加到SVN目录中. 3.将添加进去代码提取出来. 在某 ...