需要处理的xml文件内容:该部分根据个人进行修改
方式1:参考别人的写法,具体的按照结果进行实现
#!/usr/bin/python3
import xml.dom.minidom as xd #导入处理xml文件的模块
import pandas as pd
import xlwt
try:
BRANCH_CODE_LIST = []
DEPT_ID_LIST = []
DEPT_CODE_LIST = []
DEPT_NAME_LIST = []
LEVELS_LIST = []
IS_USED_LIST = []
INPUTCODE1_LIST = []
INPUTCODE2_LIST = []
KIND_ID_LIST = []
STATE_LIST = []
PARENT_ID_LIST = []
#使用minidom解析器打卡xml文档
dom = xd.parse("E:\workstation\pythonStation\dept.xml")
#得到文档元素对象
Packet = dom.documentElement #用于得到dom对象的文档元素,并把获得的对象给root
print((Packet))
if Packet.hasAttribute("defdef"):
print('Root element: %s' % (Packet.getAttribute("defdef")))
#获得标签为Body的多组标签
child_tag = Packet.getElementsByTagName("GetDeptDict")
for i in range(len(child_tag)):
tag_child = child_tag[i]
#索引号
BRANCH_CODE_VALUE = tag_child.getElementsByTagName('BRANCH_CODE')[0].firstChild.data #获得元素属性对应的值
# print(BRANCH_CODE_VALUE)
BRANCH_CODE_LIST.append(BRANCH_CODE_VALUE)
#科室内部编号
DEPT_ID_VALUE = tag_child.getElementsByTagName('DEPT_ID')[0].firstChild.data #获得元素属性对应的值
# print(DEPT_ID_VALUE)
DEPT_ID_LIST.append(DEPT_ID_VALUE)
#科室编号
DEPT_CODE_VALUE = tag_child.getElementsByTagName('DEPT_CODE')[0].firstChild.data #获得元素属性对应的值
# print(DEPT_CODE_VALUE)
DEPT_CODE_LIST.append(DEPT_CODE_VALUE)
#科室名称
DEPT_NAME_VALUE = tag_child.getElementsByTagName('DEPT_NAME')[0].firstChild.data #获得元素属性对应的值
# print(DEPT_NAME_VALUE)
DEPT_NAME_LIST.append(DEPT_NAME_VALUE)
#等级编号
# LEVELS_VALUE =
if not tag_child.getElementsByTagName('LEVELS')[0].firstChild:
LEVELS_VALUE= ""
else:
LEVELS_VALUE = tag_child.getElementsByTagName('LEVELS')[0].firstChild.data
# print(LEVELS_VALUE)
LEVELS_LIST.append(LEVELS_VALUE)
#使用状态
IS_USED_VALUE = tag_child.getElementsByTagName('IS_USED')[0].firstChild.data #获得元素属性对应的值
# print(IS_USED_VALUE)
IS_USED_LIST.append(IS_USED_VALUE)
#输入码1
INPUTCODE1_VALUE = tag_child.getElementsByTagName('INPUTCODE1')[0].firstChild.data #获得元素属性对应的值
# print(INPUTCODE1_VALUE)
INPUTCODE1_LIST.append(INPUTCODE1_VALUE)
#输入码2
INPUTCODE2_VALUE = tag_child.getElementsByTagName('INPUTCODE2')[0].firstChild.data #获得元素属性对应的值
# print(INPUTCODE2_VALUE)
INPUTCODE2_LIST.append(INPUTCODE2_VALUE)
#类型编号
KIND_ID_VALUE = tag_child.getElementsByTagName('KIND_ID')[0].firstChild.data #获得元素属性对应的值
# print(KIND_ID_VALUE)
KIND_ID_LIST.append(KIND_ID_VALUE)
#状态编号
STATE_VALUE = tag_child.getElementsByTagName('STATE')[0].firstChild.data #获得元素属性对应的值
# print(STATE_VALUE)
STATE_LIST.append(STATE_VALUE)
#父层节点
if not tag_child.getElementsByTagName('PARENT_ID')[0].firstChild:
PARENT_ID_VALUE= "2323"
else:
PARENT_ID_VALUE = tag_child.getElementsByTagName('PARENT_ID')[0].firstChild.data
# print(PARENT_ID_VALUE)
PARENT_ID_LIST.append(PARENT_ID_VALUE)
#将列表存储为字典
all_dict = {
"BRANCH_CODE":BRANCH_CODE_LIST,
"DEPT_ID":DEPT_ID_LIST,
"DEPT_CODE":DEPT_CODE_LIST,
"DEPT_NAME":DEPT_NAME_LIST,
"LEVELS":LEVELS_LIST,
"IS_USED":IS_USED_LIST,
"INPUTCODE1":INPUTCODE1_LIST,
"INPUTCODE2":INPUTCODE2_LIST,
"KIND_ID":KIND_ID_LIST,
"STATE":STATE_LIST,
"PARENT_ID":PARENT_ID_LIST
}
df = pd.DataFrame(all_dict) #将字典转换为DataFrame
#将DataFrame数据写入excel表中
with pd.ExcelWriter('car_table.xls') as Writer:
df.to_excel(Writer,'Sheet1',index=False)
except Exception as e:
print(e)
方式2:按照自动判断生成进行实现的
优化的内容,将所有的需要解析的内容,放到了list中进行实现,这样后续增加字段或者修改字段,只需要修改一个地方就可以的了
#!/usr/bin/python3
import xml.dom.minidom as xd #导入处理xml文件的模块
import pandas as pd
import xlwt
# name_dict = {}
slist_list=[]
svalue_list=[]
name_list =["BRANCH_CODE","DEPT_ID","DEPT_CODE","DEPT_NAME","LEVELS","IS_USED","INPUTCODE1","INPUTCODE2","KIND_ID","STATE","PARENT_ID"]
for i in range(len(name_list)):
value_name = name_list[i]+"_VALUE"
svalue_list.append(value_name)
list_name= name_list[i]+"_LIST"
slist_list.append(list_name)
# name_dict[value_name]=list_name
dom = xd.parse("E:\workstation\pythonStation\dept.xml")
Packet = dom.documentElement #用于得到dom对象的文档元素,并把获得的对象给root
print((Packet))
if Packet.hasAttribute("defdef"):
print('Root element: %s' % (Packet.getAttribute("defdef")))
#获得标签为Body的多组标签
child_tag = Packet.getElementsByTagName("GetDeptDict")
for i in range(len(slist_list)):
locals()[slist_list[i]]=[]
for j in range(len(child_tag)):
tag_child = child_tag[j]
for k in range(len(name_list)):
if not tag_child.getElementsByTagName(name_list[k])[0].firstChild:
locals()[svalue_list[k]]= ""
else:
locals()[svalue_list[k]] =tag_child.getElementsByTagName(name_list[k])[0].firstChild.data
locals()[slist_list[k]].append(locals()[svalue_list[k]])
# print(locals()[slist_list[0]])
#将列表存储为字典
all_dict ={}
for l in range(len(name_list)):
all_dict[name_list[l]] = locals()[slist_list[l]]
# print(all_dict)
df = pd.DataFrame(all_dict) #将字典转换为DataFrame
#将DataFrame数据写入excel表中
with pd.ExcelWriter('car_table1.xls') as Writer:
df.to_excel(Writer,'Sheet1',index=False)