备注: 基于python3

背景:在统计覆盖率的时候希望绕属性name为test的节点

具体实现源码如下所示,基本都是基于节点属性操作的,当然也就可以基于tag等其他标签去做,可根据需要调整

from xml.etree.ElementTree import ElementTree, Element

class XML_DEMO():
def __init__(self, in_path, out_path):
self.in_path = in_path
self.out_path = out_path
self.tree = None
self.parent_nodes = [] def read_xml(self):
# 读取XML文件
self.tree = ElementTree()
self.tree.parse(self.in_path) def write_xml(self):
# 将处理后的xml写入XML文件
self.tree.write(self.out_path, encoding="utf-8", xml_declaration=True) def if_match_attrib(self, node, attrib_map):
for k, v in attrib_map.items():
if node.attrib.get(k) and node.attrib.get(k) == v:
return True
return False def find_nodes_by_path(self, path):
return self.tree.findall(path) def get_node_by_attrib(self, nodelist, attrib_map):
result_nodes = []
for node in nodelist:
if self.if_match_attrib(node, attrib_map):
result_nodes.append(node)
return result_nodes @staticmethod
def change_node_attrib(nodelist, attrib_map):
for node in nodelist:
for k, v in attrib_map.items():
node.attrib[k] = v @staticmethod
def change_node_text(nodelist, text, is_add=False, is_delete=False):
for node in nodelist:
if is_add:
node.text += text
elif is_delete:
node.text = ""
else:
node.text = text @staticmethod
def create_node(tag, property_map, content):
element = Element(tag, property_map)
element.text = content
return element @staticmethod
def add_child_node(nodelist, element):
for node in nodelist:
node.append(element) @staticmethod
def del_node_by_attrib(nodelist, kv_map):
for parent_node in nodelist:
children = parent_node.getchildren()
for child in children:
for k, v in kv_map.items():
if child.attrib.get(k) and child.attrib.get(k).find(v) >= 0:
parent_node.remove(child) if __name__ == "__main__":
# 初始化xml类对象,指定源文件和目标文件
xd = XML_DEMO("sec.xml", "des.xml")
xd.read_xml()
# 需要删除的节点的父节点
del_parent_nodes = xd.find_nodes_by_path("packages/package/")
# 删除父节点下属性name为test的节点
xd.del_node_by_attrib(del_parent_nodes, {"name": "test"})
# 将删除后节点后的xml写入目标文件
xd.write_xml()

如何用python操作XML文件的更多相关文章

  1. python操作xml文件

    一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...

  2. 三十二、python操作XML文件

    '''XML:模块 xml总结 1.解析 str 文件 tree,ElementTree,type root,Element,type2.操作 Element: tag,text,find,iter, ...

  3. 使用python操作XML增删改查

    使用python操作XML增删改查 什么是XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输 ...

  4. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  5. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  6. PHP操作XML文件学习笔记

    原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...

  7. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...

  8. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...

  9. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

随机推荐

  1. Python3标准库:queue线程安全的FIFO实现

    1. queue线程安全的FIFO实现 queue模块提供了一个适用于多线程编程的先进先出(FIFO,first-in,first-out)数据结构,可以用来在生产者和消费者线程之间安全地传递消息或其 ...

  2. C#常见基础算法

    namespace 面试常见算法 { class Program { static void Main(string[] args) { ); Console.WriteLine(n1); Test2 ...

  3. Luogu1738 | 洛谷的文件夹 (Trie+STL)

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...

  4. beego的请求数据处理

    我们经常需要获取用户传递的数据,包括 Get.POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据: GetString(key string) string Get ...

  5. sqlserver数据库重启

    停止:net stop mssqlserver 重启:net start mssqlserver

  6. Win10安装.net2.0/3.0

    Windows 安装.net2.0/3.0 将下列代码拷到本地bat文件中(bat文件和sxs文件夹同级),下载适用的.net安装包版本后放置到sxs文件夹,用管理员权限执行bat文件即可. @ech ...

  7. jenkins用户权限配置 Role-based Authorization Strategy

    插件简介 插件名称 Role-based Authorization Strategy 插件介绍 Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目, ...

  8. Java第五节课总结

    继承是对现实生活中的“分类”概念的一种模拟. 通过surper调用的基类构造方法,必须是子类构造方法中的第一个语句. 构造函数(constructor)是一种特殊的方法 .主要用来在创建对象时初始化对 ...

  9. PAT (Advanced Level) Practice 1015 Reversible Primes (20 分)

    A reversible prime in any number system is a prime whose "reverse" in that number system i ...

  10. JavaScript 删除某个数组中指定的对象和删除对象属性

    Javascript: 删除指定对象:使用过程中只适合删除对象,如果数组中添加的是类型Function的话是删除不了的. function removeObjWithArr(_arr,_obj) { ...