一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是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. Day003 数据类型

    数据类型 强类型语言 ​ 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用(java.c++.c#) 弱类型语言 ​ 与强类型语言定义相反(javaScript) Java的数据类型 基本 ...

  2. Java中读取文件的几种路径配置

    获取配置文件的两种方式区别 ClassLoader.getSystemClassLoader().getResourceAsStream() //ClassLoader.getSystemClassL ...

  3. 【Linux】在centos中使用命令安装redis

    1.前提centos能够上网 测试方式输入命令,有数据返回即可.如果则先配置centos网络连接. ping www.baidu.com 2.安装gcc 输入命令进行安装 yum install gc ...

  4. 『政善治』Postman工具 — 9、在Postman中使用断言

    目录 1.Tests的介绍 2.常用SNIPPETS(片段)说明 (1)常用变量相关 (2)状态码相关 (3)响应结果断言: (4)Header : (5)响应速度: 3.示例 (1)响应码断言 (2 ...

  5. Sping AOP

    Sping AOP 1.什么是AOP 面向切面编程(AOP) 是 面向对象编程的补充(OOP) 传统的业务处理代码中,通常会惊醒事务处理.日志处理等操作.虽然可以使用OOP的组合或继承来实现代码重用, ...

  6. python爬虫——《瓜子网》的广州二手车市场信息

    由于多线程爬取数据比单线程的效率要高,尤其对于爬取数据量大的情况,效果更好,所以这次采用多线程进行爬取.具体代码和流程如下: import math import re from concurrent ...

  7. Dom树,什么是dom树?

    相信很多初学前端的小伙伴,学了html,css,js之后,欣喜之余还有一丝小傲娇,没有想到那些大佬们口中又 提到了DOM树.你两眼一抹黑,年轻人总是要接受社会的爱(du)护(da). DOM 是 Do ...

  8. redis分布式锁-spring boot aop+自定义注解实现分布式锁

    接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ...

  9. 客户端保存token到sessionStorage

    将token保存到客户端的sessionStorage 一.区分localStorage和sessionStorage localStorage是本地持久化存储 sessionStorage是浏览器会 ...

  10. [java] IDEA

    快捷键 shift+shift:搜索 ctrl+d:复制行 ctrl+x:删除行 ctrl+p:查看方法参数 ctrl+o:查看类方法 ctrl+h:查看类结构 ctrl+i:实现接口方法 ctrl+ ...