Python实现将xml导入至excel


Posted in Python onNovember 20, 2015

最近在使用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

二、程序如下:

#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

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 相关文章推荐
跟老齐学Python之玩转字符串(2)
Sep 14 Python
python中map、any、all函数用法分析
Apr 21 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
python连接mysql实例分享
Oct 09 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
深入理解Django-Signals信号量
Feb 19 Python
python字符串格式化方式解析
Oct 19 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 #Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 #Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 #Python
Python的Flask开发框架简单上手笔记
Nov 16 #Python
python实现mysql的单引号字符串过滤方法
Nov 14 #Python
浅析Python中signal包的使用
Nov 13 #Python
Python下rrdtool模块的基本使用方法
Nov 13 #Python
You might like
php 面向对象的一个例子
2011/04/12 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python数据结构之列表和元组的详解
2017/09/23 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Python如何发布程序的详细教程
2018/10/09 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
一行python实现树形结构的方法
2019/08/09 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
出国留学英文自荐信
2015/03/25 职场文书
导游词之峨眉山
2019/12/16 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫