我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python+Xml +操作+增删改查

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python+Xml +操作+增删改查

由于小编的系统需要进程间通信,想通过对Xml文件操作,来进行信息交互,于是写了一组相关的类。
xml文件:

<?xml version='1.0' encoding='utf-8'?>
<flags>
    <flag name="execute" value="false" />
    <flag name="other" value="value" />
</flags>

在写增删改差前,先封装了一组Xml方法

#!usr/bin/env python
#coding:utf-8
__author__='fangtao'
from xml.etree.ElementTree import ElementTree,Element  

class XmlDao():

    @staticmethod
    def openXml(filename):
        tree = ElementTree()  
        tree.parse(filename) 
        return tree
    @staticmethod
    def saveAs(tree,outfile):
        tree.write(outfile, encoding="utf-8",xml_declaration=True) 

    @staticmethod
    def add_child_node(nodelist, element):  
        '''给一个节点添加子节点 
           nodelist: 节点列表 
           element: 子节点''' 
        print len(nodelist) 
        print element
        for node in nodelist:  
            node.append(element)

    @staticmethod    
    def del_node_by_tagkeyvalue(nodelist, tag, kv_map):  
        '''同过属性及属性值定位一个节点,并删除之 
           nodelist: 父节点列表 
           tag:子节点标签 
           kv_map: 属性及属性值列表'''  
        for parent_node in nodelist:  
            children = parent_node.getchildren()  
            for child in children:  
                if child.tag == tag and XmlDao.if_match(child, kv_map):  
                    parent_node.remove(child)  
    @staticmethod    
    def create_node(tag, property_map, content=''):  
        '''新造一个节点 
           tag:节点标签 
           property_map:属性及属性值map 
           content: 节点闭合标签里的文本内容 
           return 新节点'''  
        element = Element(tag, property_map)  
        element.text = content  
        return element 
    @staticmethod
    def change_node_text(nodelist, text, is_add=False, is_delete=False):  
        '''改变/增加/删除一个节点的文本 
           nodelist:节点列表 
           text : 更新后的文本'''  
        for node in nodelist:  
            if is_add:  
                node.text += text  
            elif is_delete:  
                node.text = ""  
            else:  
                node.text = text
    @staticmethod  
    def change_node_properties(nodelist, kv_map, is_delete=False):  
        '''修改/增加 /删除 节点的属性及属性值 
           nodelist: 节点列表 
           kv_map:属性及属性值map'''  
        for node in nodelist:  
            for key in kv_map:  
                if is_delete:   
                    if key in node.attrib:  
                        del node.attrib[key]  
                else:  
                    node.set(key, kv_map.get(key)) 
    @staticmethod
    def get_node_by_keyvalue(nodelist, kv_map):  
        '''根据属性及属性值定位符合的节点,返回节点 
           nodelist: 节点列表 
           kv_map: 匹配属性及属性值map'''  
        result_nodes = []  
        for node in nodelist:  
            if XmlDao.if_match(node, kv_map):  
                result_nodes.append(node)  
        return result_nodes 
    @staticmethod
    def find_nodes(tree, path):  
        '''查找某个路径匹配的所有节点 
           tree: xml树 
           path: 节点路径'''  
        return tree.findall(path)
    @staticmethod
    def if_match(node, kv_map):  
        '''判断某个节点是否包含所有传入参数属性 
           node: 节点 
           kv_map: 属性及属性值组成的map'''  
        for key in kv_map:  
            if node.get(key) != kv_map.get(key):  
                return False  
        return True  

如果有自己的需要,也可以自己拿着类库直接使用,然后,写了一组API才做上面的Xml文件。

#!usr/bin/env python
#coding:utf-8
import XmlDao

class FlagDao():

    def __init__(self,filename=None):
        if filename is None:
            self.__filename = '../grapdata/flag.xml'
        else:
            self.__filename = filename
    #获取节点属性
    def getValueByName(self,name):
        tree = XmlDao.openXml(self.__filename)
        print 'tree',tree,self.__filename
        if tree is None:
            return None
        nodes = XmlDao.find_nodes(tree, 'flag')
        nodes = XmlDao.get_node_by_keyvalue(nodes, {'name':name})
        if len(nodes) > 0:
            return nodes[0].attrib['value']
        return None
    #设置节点
    def setValueByName(self,name,value):
        tree = XmlDao.openXml(self.__filename)
        if tree is None:
            return None
        nodes = XmlDao.find_nodes(tree, 'flag')
        nodes = XmlDao.get_node_by_keyvalue(nodes, {'name':name})
        if len(nodes) > 0:
            nodes[0].attrib['value'] = value
            XmlDao.saveAs(tree, self.__filename)
    #添加节点 
    def addTag(self,name,value):
        tree = XmlDao.openXml(self.__filename)
        XmlDao.add_child_node([tree.getroot()],XmlDao.create_node('flag', {'name':name,'value':value}))
        XmlDao.saveAs(tree, self.__filename) 
    #删除节点
    def deleteTagByName(self,name):
        tree = XmlDao.openXml(self.__filename)
        XmlDao.del_node_by_tagkeyvalue([tree.getroot()], 'flag', {'name':name})
        XmlDao.saveAs(tree, self.__filename)

然后写了一组案列,

import FlagDao

flagDao = FlagDao()

#查找节点
print flagDao.getValueByName('execute')
#修改节点
flagDao.setValueByName('execute', 'false')
#打印修改的节点
print flagDao.getValueByName('execute')
#添加节点
flagDao.addTag('zhangcan', 'bendan')
#删除节点
flagDao.deleteTagByName('other')

运行之后,结果为

<?xml version='1.0' encoding='utf-8'?>
<flags>
    <flag name="execute" value="false" />
    <flag name="zhangcan" value="bendan" /></flags>

希望我的过程能对您有点帮助。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python+Xml +操作+增删改查

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python+Xml +操作+增删改查

由于小编的系统需要进程间通信,想通过对Xml文件操作,来进行信息交互,于是写了一组相关的类。 xml文件: 2023-01-31

Python对XML文件实现增删改查操作

这篇文章主要为大家详细介绍了Python对XML文件进行实现增删改查操作的方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
2022-11-13

Android中XML的基本操作(增、删、改、查)

Android中XML的一些操作 解析类:// 构造方法 public XMLParser() { } public Stri
2022-06-06

node.js操作mysql(增删改查)

最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图
2022-06-04

MySQL表的操作『增删改查』

✨个人主页: 北 海 🎉所属专栏: MySQL 学习 🎃操作环境: CentOS 7.6 阿里云远程服务器 🎁软件版本: MySQL 5.7.44 文章目录 1.创建表1.1
MySQL表的操作『增删改查』
2023-12-22

Python操作MongoDB增删改查代码示例

python安装操作MongoDB的模块pymongopip install pymongopython连接mongodbmyclient=pymongo.MongoClient(host='127.0.0.1',port=27017
2022-12-21

pymysql实现增删改查的操作指南(python)

1.安装pymysql:pip install pymysql (在命令行窗口中执行) 2.卸载pymysql:pip uninstall pymysql (在命令行窗口中执行) 数据库的连接需要注意的是port是不用引号括起来 chars
2022-06-02

Python集合如何实现增删改查操作

这篇文章主要介绍Python集合如何实现增删改查操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.集合新增集合元素set1 = {name, 19, python}set1.add(abc) # 可变集合,直接
2023-06-29

python中列表的常用操作增删改查

1. 列表的概念,列表是一种存储大量数据的存储模型。2. 列表的特点,列表具有索引的概念,可以通过索引操作列表中的数据。列表中的数据可以进行添加、删除、修改、查询等操作。3. 列表的基本语法创建列表:变量名 = [数据1,数据2,……]获取
2023-01-30

python对数据库mysql的操作(增删改查)

#coding=utf-8import pymysql# #查询# def connMySQL():# try:# conn=pymysql.connect(‘localhost‘,‘root‘,‘admin‘)# co
python对数据库mysql的操作(增删改查)
2015-11-13

浅析html的增删改查操作

随着互联网的发展,HTML已成为网站开发的重要语言之一。HTML的增删改查是Web开发过程中的关键环节之一,本文将介绍HTML的增删改查操作。一、HTML的增加操作HTML的增加主要涉及三个方面:标签、属性和内容。在编辑HTML文档时,我们通过增加标签、属性和内容来实现网页的丰富和多样化。下面我们具体介绍一下HTML的增加操作。1.增加标签标签是HTML文档中最基本的元素之一,
2023-05-14

django_数据库操作—增、删、改、查

增加 增加数据有两种方法 1> sava >>> from datetime import date>>> book = BookInfo( btitle='西游记', bpub_date=date(1988,1,1),
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录