如何用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(增删改查),那么首先通过一个查询 ...
随机推荐
- HTML连载67-手风琴效果、2D转换模块
一.手风琴效果 <style> *{ margin:0; padding:0; } ul{ width: 960px; height: 300px; margin:100px auto; ...
- 多字节与Unicode
编码知识 一.Unicode与多字节(ANSI ) (1)Windows中,Unicode也称为宽字节,多字节也称为窄字节; VS中默认使用Unicode编码,在项目属性>>配置属性> ...
- c#winform自定义窗体,重绘标题栏,自定义控件学习
c#winform自定义窗体,重绘标题栏 虽然现在都在说winform窗体太丑了,但是我也能尽量让桌面应用程序漂亮那么一点点话不多说,先上图 重绘标题栏先将原生窗体设置成无边框,FormBoderSt ...
- JVM第二篇 类加载子系统
1.内存结构概述 简图 详细 2.类加载器与类加载的过程 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识[CA FE BA BY ...
- python—lambda函数,三个常用的高阶函数
"""lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...
- Anaconda 包管理与环境管理
包管理命令 conda命令 安装包 conda install 包名称 卸载包 conda remove 包名称 更新包 conda update 包名称 模糊查询 conda search 包名称 ...
- c#Socket通信基本使用
基本流程 Server private void btnStart_Click(object sender, EventArgs e) { try { //当点击开始监听时在服务器端创建一个负责监视I ...
- Callablestatement与JavaBean及其实例
一. Callablestatement:调用 数据库中的存储过程.存储函数 connection.prepareCall(参数:存储过程/存储函数名)参数格式:存储过程:(无返回值return,用O ...
- Python_基础数据类型
一,首先介绍一下变量 1. 变量是什么 在Python中,变量的概念基本上和初中代数的方程变量是一致的. 2. 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止 ...
- [NOI2003]文本编辑器 [Fhq Treap]
[NOI2003]文本编辑器 没啥好说的 就是个板子 #include <bits/stdc++.h> // #define int long long #define rep(a , b ...