前言
最近接收到一个任务,把我们写的xml格式的自动化脚本,特定的标签增加guid标识,依次来区分案例,中间出现了一个问题:经过程序处理后的xml文件中的注释全部消失了,针对次问题特此记录问题解决方案。
一、使用的模块
xml.etree.ElementTree
xml.etree.ElementTree模块实现了一个解析和创建XML数据的简单而高效的API。XML是一种固有的分层数据格式,最自然的表示方法是使用树。通常,与整个文档的交互(读写文件)是用ElementTree完成的,与单个XML元素及其子元素的交互是用Element完成的。并不是输入xml的所有元素都会出现在最终的树中。目前会忽略输入xml中的注释、处理指令以及文档类型声明。但是可以使用API在构建的树中包含注释、处理指令,并输出到xml文件中。可以通过向XMLParser构造函数传递自定义的TreeBuilder实例来访问文档类型声明。
二、使用步骤
1.引入库
from xml.etree import ElementTree
import xml.etree.ElementTree as ET
2.读入数据
xml内容
<root>
<case id="check-002" title="测试" flag="test">
<step desc="测试">
<Action trancode="021801" type="xml_set" server_index="2">
<value name="//Sys_Head/SEQ_NO">{{seq_no}}</value>
</Action>
<Verify>
<result name="RET_CODE">
000000
</result>
<result name="RET_MSG">
交易成功
</result>
</Verify>
</step>
</case>
</root>
封装可以读取xml注释的方法
# 可以读取xml中的注释内容
class CommentedTreeBuilder(ElementTree.TreeBuilder):
def __init__(self, *args, **kwargs):
super(CommentedTreeBuilder, self).__init__(*args, **kwargs)
def comment(self, data):
self.start(ElementTree.Comment, {})
self.data(data)
self.end(ElementTree.Comment)
def read_xml(in_path):
# 读取文件,并带有注释
parser = ET.XMLParser(target=CommentedTreeBuilder())
tree = ElementTree.parse(in_path, parser=parser)
return tree
if __name__ == '__main__':
path = r'E:\工作\interface\project\test\testcase\TCP挡板\tcp挡板设置.xml'
tree = read_xml(path)
总结
常用方法: