xml脚本处理遇注释消失问题:解析与创建XML的模块及相关情况

前言
最近接收到一项任务,需要把我们所写的 xml 格式的自动化脚本中特定的标签增加 guid 标识,以便依次区分案例。在此过程中出现了一个问题:经过程序处理后,xml 文件中的注释全部消失了。针对此问题,特此记录问题的解决方案。
一、使用的模块
xml.etree.ElementTree
xml.etree.ElementTree 模块提供了一个简单且高效的 API 来解析和创建 XML 数据。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 = rE:\工作\interface\project\test\testcase\TCP 挡板路径下的 tcp 挡板设置.xml
tree = read_xml(path)
总结
常用方法: