酒泉网站建设服务,奉贤网站建设,普陀企业网站建设,美食网站建设的时间进度表前言最近因为工作的需要#xff0c;在使用 Python 来发送 SOAP 请求以测试 Web Service 的性能#xff0c;由于 SOAP 是基于 XML 的#xff0c;故免不了需要使用 python 来处理 XML 数据。在对比了几种方案后#xff0c;最后选定使用 xml.etree.ElementTree模块来实现。这篇…前言最近因为工作的需要在使用 Python 来发送 SOAP 请求以测试 Web Service 的性能由于 SOAP 是基于 XML 的故免不了需要使用 python 来处理 XML 数据。在对比了几种方案后最后选定使用 xml.etree.ElementTree模块来实现。这篇文章记录了使用 xml.etree.ElementTree模块常用的几个操作也算是总结一下免得以后忘记了。分享出来也方法需要的朋友们参考学习下面话不多说了来一起看看详细的介绍吧。概述对比其他 Python 处理 XML 的方案xml.etree.ElementTree模块(下文我们以 ET 来表示)相对来说比较简单接口也较友好。官方文档 里面对 ET 模块进行了较为详细的描述总的来说ET 模块可以归纳为三个部分ElementTree类Element类以及一些操作 XML 的函数。XML 可以看成是一种树状结构ET 使用ElementTree类来表示整个 XML 文档使用Element类来表示 XML 的一个结点。对整 XML 文档的操作一般是对ElementTree对象进行而对 XML 结点的操作一般是对Element对象进行。解析 XML 文件ET 模块支持从一个 XML 文件构造ElementTree对象例如我们的 XML 文件example.xml内容如下(下文会继续使用这个 XML 文档)120081411004201159900可以使用 ET 模块的parse()函数来从指定的 XML 文件构造一个ElementTree对象import xml.etree.ElementTree as ET# 获取 XML 文档对象 ElementTreetree ET.parse(example.xml)# 获取 XML 文档对象的根结点 Elementroot tree.getroot()# 打印根结点的名称print root.tag从 XML 文件构造好ElementTree对象后还可以获取其结点或者再继续对结点进行进一步的操作。解析 XML 字符串ET 模块的fromstring()函数提供从 XML 字符串构造一个Element对象的功能。xml_str ET.tostring(root)print xml_strroot ET.fromstring(xml_str)print root.tag接着上面的代码我们使用 ET 模块的tostring()函数来将上面我们构造的root对象转化为字符串然后使用fromstring()函数重新构造一个Element对象并赋值给root变量这时root代表整个 XML 文档的根结点。构造 XML如果我们需要构造 XML 文档可以使用 ET 模块的 Element类以及SubElement()函数。可以使用Element类来生成一个Element对象作为根结点然后使用ET.SubElement()函数生成子结点。a ET.Element(a)b ET.SubElement(a, b)b.text leehao.mec ET.SubElement(a, c)c.attrib[greeting] hellod ET.SubElement(a, d)d.text www.leehao.mexml_str ET.tostring(a, encodingUTF-8)print xml_str输出leehao.mewww.leehao.me如果需要输出到文件中可以继续使用ElementTree.write()方法来处理# 先构造一个 ElementTree 以便使用其 write 方法tree ET.ElementTree(a)tree.write(a.xml, encodingUTF-8)执行后便会生成一个 XML 文件a.xml:leehao.mewww.leehao.meXML 结点的查找与更新1. 查找 XML 结点Element类提供了Element.iter()方法来查找指定的结点。Element.iter()会递归查找所有的子结点以便查找到所有符合条件的结点。# 获取 XML 文档对象 ElementTreetree ET.parse(example.xml)# 获取 XML 文档对象的根结点 Elementroot tree.getroot()# 递归查找所有的 neighbor 子结点for neighbor in root.iter(neighbor):print neighbor.attrib输出{direction: E, name: Austria}{direction: W, name: Switzerland}{direction: N, name: Malaysia}如果使用Element.findall()或者Element.find()方法则只会从结点的直接子结点中查找并不会递归查找。for country in root.findall(country):rank country.find(rank).textname country.get(name)print name, rank输出Liechtenstein 1Singapore 42. 更新结点如果需要更新结点的文本可以通过直接修改Element.text来实现。如果需要更新结点的属性可以通过直接修改Element.attrib来实现。对结点进行更新后可以使用ElementTree.write()方法将更新后的 XML 文档写入文件中。# 获取 XML 文档对象 ElementTreetree ET.parse(example.xml)# 获取 XML 文档对象的根结点 Elementroot tree.getroot()for rank in root.iter(rank):new_rank int(rank.text) 1rank.text str(new_rank)rank.attrib[updated] yestree.write(output.xml, encodingUTF-8)新生成的output.xml文件以下220081411005201159900对比example.xml文件可以看到output.xml文件已更新。总结以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作能带来一定的帮助如果有疑问大家可以留言交流谢谢大家对聚米学院的支持。参考资料https://docs.python.org/2/library/xml.html#xml-vulnerabilitieshttps://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python