如何用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(增删改查),那么首先通过一个查询 ...
随机推荐
- .NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐) 快到2020年了 ...
- 小Z的袜子(hose) HYSBZ - 2038 莫队+分块
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll>pl ...
- SpringBoot 教程之 profile 的应用
目录 区分环境的配置 区分环境的代码 激活 profile 示例源码 参考资料 一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理.Spring Boot 对此提供了简便的支 ...
- 有关配置网站时安装ZipArache的方法。
在配置网站初始化过程中,发现ZipArache需要启动,上网搜索了一番,发现安装ZipArache的步骤十分繁琐. 换一种思路,ZipArache作为PHP的拓展类,其名字首部有ZIP字样,那么可否直 ...
- [Python] 前程无忧招聘网爬取软件工程职位 网络爬虫 https://www.51job.com
首先进入该网站的https://www.51job.com/robots.txt页面 给出提示: 找不到该页 File not found 您要查看的页已删除,或已改名,或暂时不可用. 请尝试以下操作 ...
- Java中List的父类与子类如何转换?
目录 定义 要点: 子类转父类 父类转子类 定义 A是B的子类,A比B多几条属性 要点: A是B的子类,但List<A>不是List<B>的子类.所以想直接转换是不行的. 子类 ...
- 09、const与extern在一起跨文件引用
const与extern都属于属性一类. 两者加一起用需要注意的一点是,在多文件编译中,加入我们共用一个全局常量.一般的定义会是这样: A.cpp文件 const int gg_int = 100; ...
- echarts 【图表的基本使用】
一.柱状图 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- JN_0012:win10的开机启动文件夹
1,登录所有用户时都能开机启动的启动文件夹.所有用户通用的开机启动文件夹地址是 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ...
- 项目在UAP可以直接启动,但是在eclipse上面不能直接启动
上面两个eclipse都是用友的开发人员给我的,左边是驻场开发给我的,但是没有教我怎么用和哪里好用,所以一直用UAP来做开发.右边的eclipse是提ISM问题,北京用友远程调试问题时给我的,而且终于 ...