自动化处理--python读取XML格式文件
XML文件是比较标准化格式的文件,易于读取和写入,因此较为适用于自动化处理;
·
目录
XML文件是比较标准化格式的文件,易于读取和写入,因此较为适用于自动化处理;
可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点
1 导入库
import xml.dom.minidom
2 关键方法
读取xml文件以及全部的element
DOMTree = xml.dom.minidom.parse('1.xml')
data = DOMTree.documentElement #读取整个文件元素
根据tag读取所有的element
tag1 = 'UML:Interface'
node1_list = data.getElementsByTagName(tag1)
获取某一个节点下面的属性数值
node2.getAttribute('name') == "ExternalServiceInterface":
3 待读取的XML
<UML:Interface name="ExternalServiceInterface1" xmi.id="EAID_20F9B5DA_0D57_49b9_A71A_ADC3410DA80B" visibility="public" namespace="EAPK_8FA38EDF_47AE_4f2d_8067_8199D8C835A9" isRoot="false" isLeaf="false" isAbstract="true">
<UML:ModelElement.stereotype>
<UML:Stereotype name="ExternalServiceInterface"/>
</UML:ModelElement.stereotype>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="isSpecification" value="false"/>
<UML:TaggedValue tag="ea_stype" value="Interface"/>
<UML:TaggedValue tag="ea_ntype" value="0"/>
<UML:TaggedValue tag="version" value="1.0"/>
<UML:TaggedValue tag="isActive" value="false"/>
<UML:TaggedValue tag="package" value="EAPK_8FA38EDF_47AE_4f2d_8067_8199D8C835A9"/>
<UML:TaggedValue tag="owner" value="EAID_4796892B_9D77_4454_A8DF_122F196DD994"/>
<UML:TaggedValue tag="date_created" value="2022-04-23 21:11:32"/>
<UML:TaggedValue tag="date_modified" value="2022-04-23 21:11:32"/>
<UML:TaggedValue tag="gentype" value="Java"/>
<UML:TaggedValue tag="tagged" value="0"/>
<UML:TaggedValue tag="package_name" value="SWC_VehicleInfo"/>
<UML:TaggedValue tag="phase" value="1.0"/>
<UML:TaggedValue tag="author" value="chenyunshi"/>
<UML:TaggedValue tag="complexity" value="1"/>
<UML:TaggedValue tag="status" value="Proposed"/>
<UML:TaggedValue tag="stereotype" value="ExternalServiceInterface"/>
<UML:TaggedValue tag="tpos" value="0"/>
<UML:TaggedValue tag="ea_localid" value="6690"/>
<UML:TaggedValue tag="ea_eleType" value="element"/>
<UML:TaggedValue tag="style" value="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
<UML:TaggedValue tag="$ea_xref_property" value="$XREFPROP=$XID={E874CDEF-B7D9-41e1-B46F-02BBCA36FA86}$XID;$NAM=Stereotypes$NAM;$TYP=element property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=ExternalServiceInterface;FQName=NebulaMDG::ExternalServiceInterface;@ENDSTEREO;$DES;$CLT={20F9B5DA-0D57-49b9-A71A-ADC3410DA80B}$CLT;$SUP=<none>$SUP;$ENDXREF;"/>
</UML:ModelElement.taggedValue>
<UML:Classifier.feature>
<UML:Operation name="getACCRelayState" visibility="public" ownerScope="instance" isQuery="false" concurrency="sequential">
<UML:ModelElement.stereotype>
<UML:Stereotype name="R/R Method"/>
</UML:ModelElement.stereotype>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="type" value="void"/>
<UML:TaggedValue tag="const" value="false"/>
<UML:TaggedValue tag="stereotype" value="R/R Method"/>
<UML:TaggedValue tag="synchronised" value="0"/>
<UML:TaggedValue tag="concurrency" value="Sequential"/>
<UML:TaggedValue tag="position" value="11"/>
<UML:TaggedValue tag="pure" value="0"/>
<UML:TaggedValue tag="ea_guid" value="{09F69E0F-FFBA-40ea-8B06-B219DA79057B}"/>
<UML:TaggedValue tag="ea_localid" value="10278"/>
<UML:TaggedValue tag="$ea_xref_property" value="$XREFPROP=$XID={41904700-34B0-4cdd-8543-374F1A63FC8D}$XID;$NAM=Stereotypes$NAM;$TYP=operation property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=R/R Method;FQName=NebulaMDG::R/R Method;@ENDSTEREO;$DES;$CLT={09F69E0F-FFBA-40ea-8B06-B219DA79057B}$CLT;$SUP=<none>$SUP;$ENDXREF;"/>
<UML:TaggedValue tag="ea_guid" value="{09F69E0F-FFBA-40ea-8B06-B219DA79057B}" xmi.id="EAID_F024E1BC_213D_4154_A7F0_BF0D271E5A95"/>
</UML:ModelElement.taggedValue>
<UML:BehavioralFeature.parameter>
<UML:Parameter kind="return" visibility="public">
<UML:Parameter.type>
<UML:Classifier xmi.idref="eaxmiid0"/>
</UML:Parameter.type>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="pos" value="0"/>
<UML:TaggedValue tag="type" value="void"/>
<UML:TaggedValue tag="const" value="0"/>
<UML:TaggedValue tag="ea_guid" value="{RETURNID-FFBA-40ea-8B06-B219DA79057B}"/>
</UML:ModelElement.taggedValue>
<UML:Parameter.defaultValue>
<UML:Expression/>
</UML:Parameter.defaultValue>
</UML:Parameter>
<UML:Parameter name="accRelayState" kind="out" visibility="public">
<UML:Parameter.type>
<UML:Classifier xmi.idref="EAID_2006AF16_62DF_437b_98D6_85FD98EFBC51"/>
</UML:Parameter.type>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="pos" value="0"/>
<UML:TaggedValue tag="type" value="ACCRelayState"/>
<UML:TaggedValue tag="const" value="0"/>
<UML:TaggedValue tag="classifier" value="EAID_2006AF16_62DF_437b_98D6_85FD98EFBC51"/>
<UML:TaggedValue tag="ea_guid" value="{84BF4612-D106-4b9d-A24B-7CFBAE72A44C}"/>
</UML:ModelElement.taggedValue>
<UML:Parameter.defaultValue>
<UML:Expression/>
</UML:Parameter.defaultValue>
</UML:Parameter>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="getAntiAlarmState" visibility="public" ownerScope="instance" isQuery="false" concurrency="sequential">
<UML:ModelElement.stereotype>
<UML:Stereotype name="R/R Method"/>
</UML:ModelElement.stereotype>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="type" value="void"/>
<UML:TaggedValue tag="const" value="false"/>
<UML:TaggedValue tag="stereotype" value="R/R Method"/>
<UML:TaggedValue tag="synchronised" value="0"/>
<UML:TaggedValue tag="concurrency" value="Sequential"/>
<UML:TaggedValue tag="position" value="6"/>
<UML:TaggedValue tag="returnarray" value="0"/>
<UML:TaggedValue tag="pure" value="0"/>
<UML:TaggedValue tag="ea_guid" value="{FF55BDA1-3C9F-4034-8C6D-2CFCA4151220}"/>
<UML:TaggedValue tag="ea_localid" value="8564"/>
<UML:TaggedValue tag="$ea_xref_property" value="$XREFPROP=$XID={64538DB7-2D66-4bb3-9D9F-9A2C14EEE3BD}$XID;$NAM=Stereotypes$NAM;$TYP=operation property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=R/R Method;FQName=NebulaMDG::R/R Method;@ENDSTEREO;$DES;$CLT={FF55BDA1-3C9F-4034-8C6D-2CFCA4151220}$CLT;$SUP=<none>$SUP;$ENDXREF;"/>
<UML:TaggedValue tag="ea_guid" value="{FF55BDA1-3C9F-4034-8C6D-2CFCA4151220}" xmi.id="EAID_E0FF7047_5763_407e_A8F5_BBFEAF099D33"/>
</UML:ModelElement.taggedValue>
<UML:BehavioralFeature.parameter>
<UML:Parameter kind="return" visibility="public">
<UML:Parameter.type>
<UML:Classifier xmi.idref="eaxmiid0"/>
</UML:Parameter.type>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="pos" value="0"/>
<UML:TaggedValue tag="type" value="void"/>
<UML:TaggedValue tag="const" value="0"/>
<UML:TaggedValue tag="ea_guid" value="{RETURNID-3C9F-4034-8C6D-2CFCA4151220}"/>
</UML:ModelElement.taggedValue>
<UML:Parameter.defaultValue>
<UML:Expression/>
</UML:Parameter.defaultValue>
</UML:Parameter>
<UML:Parameter name="antiAlarmState" kind="out" visibility="public">
<UML:Parameter.type>
<UML:Classifier xmi.idref="EAID_D2E934C4_F48B_4287_A007_F87AB2A222BD"/>
</UML:Parameter.type>
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="pos" value="0"/>
<UML:TaggedValue tag="type" value="AntiAlarmState"/>
<UML:TaggedValue tag="const" value="0"/>
<UML:TaggedValue tag="classifier" value="EAID_D2E934C4_F48B_4287_A007_F87AB2A222BD"/>
<UML:TaggedValue tag="ea_guid" value="{2BF001B9-9553-4758-859E-D5095569C865}"/>
</UML:ModelElement.taggedValue>
<UML:Parameter.defaultValue>
<UML:Expression/>
</UML:Parameter.defaultValue>
</UML:Parameter>
</UML:BehavioralFeature.parameter>
</UML:Operation>
……………………省略
4 代码
from ctypes.wintypes import tagMSG
import os
from pickletools import TAKEN_FROM_ARGUMENT1
from platform import node
import xml.dom.minidom
##获取xml文件地址
input('回车开始转换')
DOMTree = xml.dom.minidom.parse('1.xml')
data = DOMTree.documentElement #读取整个文件元素
Operation = []
oper_num = 0
Inter_type = []
Para = []
Para_kind = []
Para_type = []
num = 0
tag1 = 'UML:Interface'
tag2 = 'UML:Stereotype'
node1_list = data.getElementsByTagName(tag1)
# print(len(node1_list))
node2_list = []
node1tmp = 0 #找到对应子标签为"ExternalServiceInterface"的上层Element
for node1 in node1_list:
node2_list = node1.getElementsByTagName(tag2)
for node2 in node2_list:
if node2.getAttribute('name') == "ExternalServiceInterface":
node1tmp = node1
# print(node1tmp)
if node1tmp == 0:
print("该文件无ExternalServiceInterface的子Element或者格式错误")
tag3 = 'UML:Operation'
node3_list = node1tmp.getElementsByTagName(tag3)
node4_list = []
for node3 in node3_list:
operation = node3.getAttribute('name') #获取接口名字
oper_num = oper_num+1
try:
inter_type = node3.getElementsByTagName('UML:Stereotype')[0].getAttribute('name')#获取接口类型
except:
print("获取接口类型失败")
tag4 = "UML:Parameter"
node4_list = node3.getElementsByTagName(tag4)
num = len(node4_list)
for node4 in node4_list:
if node4.getAttribute('name') == '': #提出return类型的参数了
num = num - 1
continue
para = node4.getAttribute('name')
para_kind = node4.getAttribute('kind') # in / out
Para.append(para)
Para_kind.append(para_kind)
tag5 = "UML:TaggedValue"
node5_list = node4.getElementsByTagName(tag5)
para_type = ''
for node5 in node5_list:
if node5.getAttribute('tag') == "type":
para_type = node5.getAttribute('value') #获取参数类型
Para_type.append(para_type)
for i in range(num):
Operation.append(operation)
Inter_type.append(inter_type)
# Para.append(para)
# Para_kind.append(para_kind)
# Para_type.append(para_type)
print("该XML文件共有{}个接口".format(oper_num))
if len(Operation) == len(Para):
print('应该没问题,可以转换')
else:
print('可能有问题。。。')
from openpyxl import Workbook
#新建excel
wb = Workbook() # 实例化
ws = wb.active # 激活 worksheet
for i in range(1,len(Operation)+1,1):
ws.cell(row=i+1, column=2, value=Operation[i-1])#row:行 column:列 value:内容
ws.cell(row=i+1, column=3, value=Para[i-1])#row:行 column:列 value:内容
ws.cell(row=i+1, column=4, value=Para_kind[i-1])#row:行 column:列 value:内容
ws.cell(row=i+1, column=5, value=Para_type[i-1])#row:行 column:列 value:内容
ws.cell(row=i+1, column=6, value=Inter_type[i-1])#row:行 column:列 value:内容
ws.cell(row=1, column=2, value='服务接口名')# 加上标题
ws.cell(row=1, column=3, value='参数名')
ws.cell(row=1, column=4, value='参数方向')
ws.cell(row=1, column=5, value='参数类型')
ws.cell(row=1, column=6, value='接口类型')
wb.save('表格.xlsx')
print('')
print('转换完成!')
input('回车结束')
更多推荐




所有评论(0)