首页 > 编程 > Python > 正文

Python实现将xml导入至excel

2020-01-04 17:56:18
字体:
来源:转载
供稿:网友

本文给大家讲解的是使用Python的Testlink实现将实现将xml导入至excel表格中,方法非常的简单,另外附上其他小伙伴的方法,有需要的童鞋们可以参考下。

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

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

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

使用版本:

python:2.7.5

xlwt:1.0.0

一、先分析Testlink XML格式:

Python实现将xml导入至excel

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

二、程序如下:
 

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

写入excel的效果如下:

Python实现将xml导入至excel

我们再来看个实例:

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

 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表