一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是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. C#-窗体移动

    #region 窗体移动API [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [Dll ...

  2. svchost服务(DLL服务)

    相比于exe服务,DLL服务只需要一个dll,而且运行是通过svchost.exe来运行的,同时安装和卸载的时候需要自己手动修改相关注册表.原理及其细节就不多说了,直接上代码吧(我写的这个是创建新组然 ...

  3. Redis数据结构—链表与字典的结构

    目录 Redis数据结构-链表与字典的结构 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 Redis字典的使用 Re ...

  4. Mac 右键强化工具-超级右键

    App Store 功能介绍 1.新建文件 默认支持新建:TXT/RTF/XML/Word/Excel/PPT/WPS文字/WPS表格/WPS演示/Pages/Numbers/keynote/Ai/P ...

  5. opencv——图像遍历以及像素操作

    摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...

  6. C++ string的size()和length()函数没有区别

    C++标准库中的string中两者的源代码如下:      size_type   __CLR_OR_THIS_CALL   length()   const     { //   return   ...

  7. 浙江省第三届大学生网络与信息安全竞赛WP

    title: 浙江省第三届大学生网络与信息安全预赛WP date: 2020-10-2 tags: CTF,比赛 categories: CTF 比赛 浙江省第三届大学生网络与信息安全竞赛WP 0x0 ...

  8. SimpleSelectionSort

    简单选择排序 <script type="text/javascript"> var obj={ data:[0,3,1,5,7,4,8,9,5], length:8 ...

  9. Linux进阶之日志管理

    一.何为日志 1.在程序执行时,可以通过标准输出以及错误输出,让我们知道程序的执行情况,而系统不可能将所有程序的输出信息一起显示,要知道后台执行的程序非常之多,如果一起显示,那我们不用操作了,整天只看 ...

  10. Linux进阶之排错

    Permission denied 检查selinux长时间没有响应 防火墙 nginx和httpd可以自检nginx和httpd有日志 /var/log/nginx/ /var/log/httpd/ ...