一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是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#-string生成图片

    public static Bitmap GetLink(string Wordstr) { #region older //arial //StrForImg sf = new StrForImg( ...

  2. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  3. 【JavaScript】Leetcode每日一题-青蛙过河

    [JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...

  4. 【maven】maven创建项目问题

    这个问题困扰了很多,几个月在做大数据课设的时候,本想创建maven项目,但是创建项目失败了.这次又碰到maven创建项目失败,终于解决了.下面按碰到问题的时间来描述,所以需要从头认真看 前提须知 Ma ...

  5. php 获取某数组中出现次数最多的值(重复最多的值)与出现的次数

    1.$arr = array(7,7,8,9,10,10,10); $arr = array_count_values($arr);   // 统计数组中所有值出现的次数 arsort($arr);  ...

  6. MFC对话框不能使用菜单更新宏ON_UPDATE_COMMAND_UI

    菜单更新宏的原理 更新处理宏的工作原理是基于框架窗口类的.MFC中对话框菜单更新宏的原理是:当我们使用从CFrameWnd框架窗口类中派生的类创建窗口时,当我们单击菜单且菜单还未弹出前会产生WM_IN ...

  7. Windows下 MySQL慢查询配置修改

    在剖析服务器性能的过程中,慢查询是一个很好的工具. 我们可以通过设置slow_query_log来开启慢查询日志,long_query_time属性来设置慢查询定义阈值,设置slow_query_lo ...

  8. 2020BUAA-个人博客-案例分析

    个人博客作业-软件案例分析 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 通过案例分析提升自己对于软件工程的认识 课程收获 分析软件,了解软件的定位 第一部分 调研,评测( ...

  9. WPS 2010 页眉下方添加下划线

    我们在使用Word2010编辑文档中时,有时需要在页眉下方删除或添加一条横线.本篇经验就来介绍一下删除和添加横线的方法. 工具/原料   Word 2010 一.删除横线   1 打开Word2010 ...

  10. Rsync忽略文件夹或目录

    使用Rsync同步的时候往往会要求对某个文件夹或者文件进行忽略,客户端可以使用--exclude参数来实现对,目录或者文件的忽略 rsync -rltvz --port=873 --exclude & ...