一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是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("\n",'').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("\n",'None') if self.child_text=='\n' 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

使用ElementTree解析,操作xml的更多相关文章

  1. python xml.etree ElementTree解析 编辑 xml

    python有很多种xml解析方式,不过感觉etree的ElementTree 用起来最方便. #coding=utf-8 from xml.etree import ElementTree impo ...

  2. [python]使用ElementTree解析XML【译】

    19.7 The ElementTree XML API 源码:Lib/xml/etree/ElementTree.py Element类型是一个灵活的容器对象,设计出来是用于存储有层次的数据结构到内 ...

  3. ZH奶酪:Python使用ElementTree解析XML【译】

    19.7. xml.etree.ElementTree — The ElementTree XML API 源代码: Lib/xml/etree/ElementTree.py Element类型是一种 ...

  4. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  5. java使用dom4j和XPath解析XML与.net 操作XML小结

    最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...

  6. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  7. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  8. python 使用ElementTree解析xml

    以country.xml为例,内容如下: <?xml version="1.0"?> <data> <country name="Liech ...

  9. xml解析 使用dom4j操作xml

     使用dom4j操作xml 1 导入 dom4j,的jar包   2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...

随机推荐

  1. 基于 registry 搭建 Docker 私有镜像仓库

    今天主要介绍使用 registry 来搭建 Docker私有镜像仓库,方便在公司内部项目中使用,registry 也是 Docker 官方提供的一个镜像,操作也很简单. dockerhub: http ...

  2. PHPcms v9.6.0 文件上传漏洞

    title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...

  3. DataGear 变更部署数据库为SQL Server填坑指南(含转写后的SQL server代码及SQL server配置文件)

    1. 引言 2. 配置数据库链接 3. 引入数据库驱动 4. 手动初始化数据库 5. 改写SQL 6. 其他 7. 参考 1. 引言 DataGear默认使用Derby数据库作为系统的元数据库,至于待 ...

  4. zimbra安装ssl证书

    zimbra在后台安装证书签发机构签发证书出现时候出现错误:{RemoteManager: mail.domain.com->zimbra@mail.domain.com:22} com.zim ...

  5. JMeter四种参数化方式

    JMeter参数化是指把固定的数据动态化,这样更贴合实际的模拟用户请求,比如模拟多个不同账号.JMeter一共有四种参数化方式,分别是: CSV Data Set Config Function He ...

  6. [刷题] 70 Climbing Stairs

    要求 楼梯共有n个台阶,每次上一个台阶或两个台阶,一共有多少种上楼梯的方法? 示例 输入:n=3 [1,1,1],[1,2,],[2,1] 输出:n=3 实现 自顶向下(递归) 递归 1 class ...

  7. Zabbix 常用术语

    Zabbix 常用术语 1.主机(host) 一台你想监控的网络设备,用IP或域名表示 2.主机组(host group) 主机的逻辑组;它包含主机和模板.-个主机组里的主机和模板之间并没有任何直接的 ...

  8. Linux_网络基础管理

    一.网卡的命名 1.传统网卡命名 eth0.eth1.eth2.eth3......... wlan0.wlan1.waln2.wlan3......... 2.RHEL7命名机制 systemd对网 ...

  9. 【错误解决】The prefix "context" for element "context:component-scan" is not bound

    在配置spring相关的applicationContext.xml文件时报以上错误 原因是缺失context的namespace. http://www.springframework.org/sc ...

  10. archlinux Timeshift系统备份与还原

    安装 timeshif yay -s timeshif 备份设置 选择快照类型 此处选择[RSYNC] 选择储存位置 每台设备安装分区不一样,大家安装实际情况选择,一般选择比较大的空间存储,并且最好是 ...