zoukankan      html  css  js  c++  java
  • 使用ElementTree解析,操作xml

    一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是xml格式的数据,所以用到了python内部模块ElementTree对xml进行解析,并根据实际需求操作xml数据

    二.代码示例

    #coding:utf-8
    import xml.etree.ElementTree as etree
    import time
    
    class ReadXML():
        def __init__(self,path=None):
            self.path=path
            if self.path!=None:
                #获取xml文件中的树结构对象,root节点
                self.dom=etree.parse(self.path)
                self.root=self.getroot()
    
        def getroot(self):
            # self.root=self.dom.documentElement
            self.root=self.dom.getroot()
            return self.root
    
    #将字符串转换为xml
        def stringtoXML(self,text_str):
            return etree.fromstring(text_str)
    
    # 将从xml文件获取的根节点转换为 xml字符串 (供传参时内容是xml字符串时使用)
        def tostring(self):
            self.root=self.getroot()
            self.root_str=etree.tostring(self.root)
            return self.root_str
    
    #获取节点的标签名
        def get_eleTag(self,ele):
            return ele.tag
    
    #获取节点的属性
        def get_eleAttrib(self,ele):
            return ele.attrib
    
    #获取节点的文本内容
        def get_eleText(self,ele):
            return ele.text
    
    #获取子节点的文本内容
        def get_childeleText(self,fele,cele):
            return fele.find(cele).text
    
    #修改节点的内容(用于审方入参数据的修改)
        def set_eleText(self,fele,cele):
            for ele in fele:
                if ele.tag==cele:
                    ele.text=str(time.time())
                    print(ele,ele.text)
                self.set_eleText(ele,cele)
    
    #将xml中节点文本内容中的换行与空格去掉
        def del_space(self,root):
            for ele in root:
                # print(ele.text,list(ele))
                if list(ele)!=[] or ele.text==None:   #如果节点下面还有子节点或者节点文本内容为空,不进行删除操作
                    ele.text=ele.text
                else:
                    ele.text=ele.text.replace("
    ",'').strip()
                self.del_space(ele)
            self.dom.write(self.path,encoding='utf-8')
    
    #根据属性名称获取属性的内容
        def get_eleAttribByName(self,ele,name):
            return ele.get(name)
    
    #获取所有的节点以及节点的内容
        def get_allEle(self,fele):
                for child in fele:
                    self.child_text=child.text.replace(" ","") if child.text!=None else child.text     #把xml中节点内容中有空格的去掉
                    self.rlt_dict[child.tag]=self.child_text.replace("
    ",'None') if self.child_text=='
    ' else self.child_text   #把xml中节点内容是换行符的替换成None
                    self.get_allEle(child)   #调用函数自己本身
                return self.rlt_dict
    
    #定义一个局部变量,调用获取节点的接口,获取所有的节点
        def get_allEle_change(self,fele):
            self.rlt_dict={}
            return self.get_allEle(fele)
    
    
    
    #
    if __name__=='__main__':
        rxml=ReadXML('../data/checkin/all.xml')
        rxml.del_space(rxml.root)

    三.参考资料:

    https://docs.python.org/2/library/xml.html#xml-vulnerabilities
    https://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python

  • 相关阅读:
    C#线程优先级浅析
    Android常用组件
    Android 内存监测工具 DDMS --> Heap
    Android 十个非常漂亮的常用组件
    RelativeLayout 相对布局 常用属性
    Android 关于横竖屏
    (转)Android 之 StrictMode 介绍
    Android如何获取SIM卡信息
    Android 读SIM卡信息
    Android Camera 使用小结
  • 原文地址:https://www.cnblogs.com/pipile/p/12612313.html
Copyright © 2011-2022 走看看