如何用python操作XML文件
备注: 基于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文件的更多相关文章
- python操作xml文件
一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...
- 三十二、python操作XML文件
'''XML:模块 xml总结 1.解析 str 文件 tree,ElementTree,type root,Element,type2.操作 Element: tag,text,find,iter, ...
- 使用python操作XML增删改查
使用python操作XML增删改查 什么是XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输 ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- Java操作XML文件 dom4j 篇
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...
- PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...
- Python操作Zip文件
Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...
- Qt之QDomDocument操作xml文件-模拟ini文件存储
一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...
- JAVA中通过Jaxp操作XML文件基础
Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...
随机推荐
- C#设计模式学习笔记:(5)原型模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,记录一下学习过程以备后续查用. 一.引言 很多人说原型设计模式会节省机器内存,他们说 ...
- linux cpp (接口与实现的分离)
以下是 .h 文件,是接口. 以下是函数的实现 以下是主函数 首先是以上两个文件编译,不用编译头文件 g++ -c gradeBook.cpp g++ -c gradeBook.main.cpp 之后 ...
- 秋水逸冰实用Linux脚本收藏
秋水逸冰的脚本非常受欢迎,奈何其本人博客已经不能访问(目前是这样,不知道别的地区是否能访问),实际上GitHub上他本人一直在维护,因为某些原因不放出他本人的GitHub地址.截止到2019年12月1 ...
- C# monitor keyboard and mouse actions based on MouseKeyHook.
1.Install-package MouseKeyHook 2. using Gma.System.MouseKeyHook; using System; namespace ConsoleApp1 ...
- CSS字体连写及外观属性
一.font:字体连写 使用font属性时,必须按以下语法格式中的顺序书写,不能更换顺序,各个属性以空格隔开.注意:其中不需要设置的属性可以省略(取默认值),但必须保留font-size和font-f ...
- HTML5文档类型如何定义,有哪些标签,以及如何使用,从整体认识HTML5
html5新增结构标签 header 头部 nav 导航 section 区域 article 文章 aside 侧边栏 figure 一组多媒体内容 figcaption 多媒体内容的标题 foot ...
- 分库分表技术演进&最佳实践
每个优秀的程序员和架构师都应该掌握分库分表,这是我的观点. 移动互联网时代,海量的用户每天产生海量的数量,比如: 用户表 订单表 交易流水表 以支付宝用户为例,8亿:微信用户更是10亿.订单表更夸张, ...
- 用R实现范式编程
面向函数范式编程(Functional programming) 模拟简单的随机过程 模拟一个简单的随机过程:从N~(0,1)标准正态分布中产生100个随机值,反复5次得到一个list,再以每个lis ...
- Vue的H5页面唤起支付宝支付
目前项目中比较常用的第三方支付无非就是支付宝支付和微信支付.下面介绍一下Vue中H5页面如何使用支付宝支付.其实很简单的,只不过是调自己后台的一个接口而已(后台根据支付宝文档,写好支付接口). 触发支 ...
- Lodash是什么?
lodash:是一个一致性.模块化.高性能的 JavaScript 实用工具库.(也就是相当于自己封装的私有方法) node里引入 // Load the full build. var _ = re ...