gpt4 book ai didi

Python实现将xml导入至excel

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 33 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python实现将xml导入至excel由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意.

那求人不如尔己,自己写一个吧 。

需要用到的模块有:xml.dom.minidom(python自带)、xlwt 。

使用版本:

python:2.7.5 。

xlwt:1.0.0 。

1、先分析Testlink XML格式:

Python实现将xml导入至excel

这是一个有两级testusuit的典型的testlink用例结构,我们只需要取testsuite name,testcase name,preconditions,actions,expectedresults 。

2、程序如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#coding:utf-8
'''
Created on 2015-8-20
 
@author: Administrator
'''
'''
'''
import xml.etree.cElementTree as ET
import xml.dom.minidom as xx
import os,xlwt,datetime
 
workbook = xlwt.Workbook(encoding = "utf-8" )
#
booksheet = workbook.add_sheet(u 'sheet_1' )
booksheet.col( 0 ).width = 5120
booksheet.col( 1 ).width = 5120
booksheet.col( 2 ).width = 5120
booksheet.col( 3 ).width = 5120
booksheet.col( 4 ).width = 5120
booksheet.col( 5 ).width = 5120
 
dom = xx.parse(r 'D:\\Python27\test.xml' )
root = dom.documentElement
row = 1
col = 1
 
borders = xlwt.Borders()
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
 
 
style = xlwt.easyxf( 'align: wrap on,vert centre, horiz center' ) #自动换行、水平居中、垂直居中
#设置标题的格式,字体方宋、加粗、背景色:菊黄
#测试项的标题
 
title = xlwt.easyxf(u 'font:name 仿宋,height 240 ,colour_index black, bold on, italic off; align: wrap on, vert centre, horiz center;pattern: pattern solid, fore_colour light_orange;' )
item = '测试项'
Subitem = '测试分项'
CaseTitle = '测试用例标题'
Condition = '预置条件'
actions = '操作步骤'
Result = '预期结果'
booksheet.write( 0 , 0 ,item,title)
booksheet.write( 0 , 1 ,Subitem,title)
booksheet.write( 0 , 2 ,CaseTitle,title)
booksheet.write( 0 , 3 ,Condition,title)
booksheet.write( 0 , 4 ,actions,title)
booksheet.write( 0 , 5 ,Result,title)
#冻结首行
booksheet.panes_frozen = True
booksheet.horz_split_pos = 1
 
 
#一级目录
for i in root.childNodes:
   testsuite = i.getAttribute( 'name' ).strip()
   #print testsuite
   #print testsuite
   '''
   写测试项
   '''
   print "row is :" ,row
   booksheet.write(row,col,testsuite,style)
  
 
   #二级目录
   for dd in i.childNodes:
     print "    %s" % dd.getAttribute( 'name' )
     testsuite2 = dd.getAttribute( 'name' )
     if not dd.getElementsByTagName( 'testcase' ):
       print "Testcase is %s" % testsuite2
       row = row + 1
       booksheet.write(row, 2 ,testsuite2,style)  #写测试分项
    
     row = row + 1
    
     booksheet.write(row, 1 ,testsuite2,style)
     itemlist = dd.getElementsByTagName( 'testcase' )
    
     for subb in itemlist:
       #print "         %s" % subb.getAttribute('name')
       testcase = subb.getAttribute( 'name' )
      
       row = row + 1
       booksheet.write(row, 2 ,testcase,style)
 
       ilist = subb.getElementsByTagName( 'preconditions' )
       for ii in ilist:
         preconditions = ii.firstChild.data.replace( "<br />" , " " )
         col = col + 1
         booksheet.write(row, 3 ,preconditions,style)
       steplist = subb.getElementsByTagName( 'actions' )
       #print steplist
       for step in steplist:
         actions = step.firstChild.data.replace( "<br />" , " " )
         col = col + 1
         booksheet.write(row, 4 ,actions,style)
       #print "测试步骤:",steplist[0].firstChild.data.replace("<br />"," ")
       expectlist = subb.getElementsByTagName( 'expectedresults' )
      
       for expect in expectlist:
         result = expect.childNodes[ 0 ].nodeValue.replace( "<br />" ,"" )
         booksheet.write(row, 5 ,result,style)
 
      
   row = row + 1
        
workbook.save( 'demo.xls' )

写入excel的效果如下:

Python实现将xml导入至excel

我们再来看个实例:

需要下载一个module:xlwt,如下是source code 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import xml.dom.minidom
import xlwt
import sys
 
col = 0
row = 0
 
 
def handle_xml_report(xml_report, excel): 
   problems = xml_report.getElementsByTagName( "problem" )
   handle_problems(problems, excel)
  
 
def handle_problems(problems, excel):
   for problem in problems:
     handle_problem(problem, excel)
 
 
def handle_problem(problem, excel):
   global row
   global col
   code = problem.getElementsByTagName( "code"
   file = problem.getElementsByTagName( "file"
   line = problem.getElementsByTagName( "line"
   message  = problem.getElementsByTagName( "message" )
 
   for node in code: 
     excel.write(row, col, node.firstChild.data)
     col = col + 1
   for node in file
     excel.write(row, col, node.firstChild.data)
     col = col + 1   
   for node in line: 
     excel.write(row, col, node.firstChild.data)    
     col = col + 1   
   for node in message: 
     excel.write(row, col, node.firstChild.data)    
     col = col + 1
   row = row + 1
   col = 0
 
if __name__ = = '__main__' :
   if ( len (sys.argv) < = 1 ):
     print ( "usage: xml2xls src_file [dst_file]" )
     exit( 0 )
   #the 1st argument is XML report ; the 2nd is XLS report
   if ( len (sys.argv) = = 2 ):
     xls_report = sys.argv[ 1 ][: - 3 ] + 'xls'
   #if there are more than 2 arguments, only the 1st & 2nd make sense
   else :
     xls_report = sys.argv[ 2 ]
   xmldoc = xml.dom.minidom.parse(sys.argv[ 1 ])
   wb = xlwt.Workbook()
   ws = wb.add_sheet( 'MOLint' )
   ws.write(row, col, 'Error Code' )
   col = col + 1
   ws.write(row, col, 'file' )
   col = col + 1
   ws.write(row, col, 'line'
   col = col + 1
   ws.write(row, col, 'Description' )
   row = row + 1
   col = 0
   handle_xml_report(xmldoc, ws)
   wb.save(xls_report)

最后此篇关于Python实现将xml导入至excel的文章就讲到这里了,如果你想了解更多关于Python实现将xml导入至excel的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com