如何在python中同时删除多个xml元素?
时间:2011-12-01
来源:互联网
例子:xml文件所示:
<root dirname="xml">
- <dir dirname="b">
<dir dirname="c" />
</dir>
</dir>
- <file>
<filename>as</filename>
<filetype>txt</filetype>
<filehash>d41d8cd98f00b204e9800998ecf8427e</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>
<file>
<filename>asass</filename>
<filetype />
<filehash>d6f199804ab7f9425057e940b16851a6</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>>
</root>
目的是想删除这块xml文件的这部分内容
“ <file>
<filename>as</filename>
<filetype>txt</filetype>
<filehash>d41d8cd98f00b204e9800998ecf8427e</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>”
我的想法是用xpath找到file这个节点,然后寻找其子节点比较filename的名字是否相等,如果相等的话直接返回其父节点,然后用root删除掉该节点,代码如下
node2=root.xpath("/root/file")
for i in range(len(node2)):
... for c in node2[i]:
... if c.text=='as':
... print i
... root.remove(node2[i])
...
0
Traceback (most recent call last):
File "<interactive input>", line 5, in <module>
File "lxml.etree.pyx", line 744, in lxml.etree._Element.remove (src/lxml/lxml.etree.c:32634)
ValueError: Element is not a child of this node.
请问这是啥个原因呢,为什么node2[i]的父节点不是root了呢。。。求大牛解答给个方法呀
<root dirname="xml">
- <dir dirname="b">
<dir dirname="c" />
</dir>
</dir>
- <file>
<filename>as</filename>
<filetype>txt</filetype>
<filehash>d41d8cd98f00b204e9800998ecf8427e</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>
<file>
<filename>asass</filename>
<filetype />
<filehash>d6f199804ab7f9425057e940b16851a6</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>>
</root>
目的是想删除这块xml文件的这部分内容
“ <file>
<filename>as</filename>
<filetype>txt</filetype>
<filehash>d41d8cd98f00b204e9800998ecf8427e</filehash>
<updateclient>Jackie-PC</updateclient>
<current_version>0</current_version>
<master_version>0</master_version>
</file>”
我的想法是用xpath找到file这个节点,然后寻找其子节点比较filename的名字是否相等,如果相等的话直接返回其父节点,然后用root删除掉该节点,代码如下
node2=root.xpath("/root/file")
for i in range(len(node2)):
... for c in node2[i]:
... if c.text=='as':
... print i
... root.remove(node2[i])
...
0
Traceback (most recent call last):
File "<interactive input>", line 5, in <module>
File "lxml.etree.pyx", line 744, in lxml.etree._Element.remove (src/lxml/lxml.etree.c:32634)
ValueError: Element is not a child of this node.
请问这是啥个原因呢,为什么node2[i]的父节点不是root了呢。。。求大牛解答给个方法呀
作者: jyjyjy1987 发布时间: 2011-12-01
贴一段工整正确的代码这么难吗?
作者: iambic 发布时间: 2011-12-01
感觉我说的已经很清楚了啊,没看懂什么意思么?
引用 1 楼 iambic 的回复:
贴一段工整正确的代码这么难吗?
贴一段工整正确的代码这么难吗?
作者: jyjyjy1987 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28