使用Nodejs 实现Excel文件转换为JSON、Xml文件格式
2017-12-08 11:25
731 查看
最近公司部署了Testlink的测试用例管理平台,比较坑的是这个导入用例方式只有支持xml文件格式,在网上找了下几个支持EXcel文件格式导入的方法,进行配置后没有生效,只好考虑对测试用例文档进行转换格式(excel文档--转为--json--转为--xml),来实现转换功能。
使用Nodejs 的方式大致如下,文件目录说明:
Excel :将需要转换的Excel文档放在 Excel 目录下,对应的目标Xml文件也是放在这个文件下。
js :存放具体实现的js文件和单独引用的文件,lib目录下引入underscore-min.js 。
node_modules :存放对应的引用类库,
js目录存放文件:
node_modules 引用的类库如下:
实现create.js 代码如下:
使用Nodejs 的方式大致如下,文件目录说明:
Excel :将需要转换的Excel文档放在 Excel 目录下,对应的目标Xml文件也是放在这个文件下。
js :存放具体实现的js文件和单独引用的文件,lib目录下引入underscore-min.js 。
node_modules :存放对应的引用类库,
js目录存放文件:
node_modules 引用的类库如下:
实现create.js 代码如下:
'use strict'; var xlsxrd = require("node-xlsx"); var _ = require("./lib/underscore-min.js"); var fs = require('fs'); var xml2js = require('xml2js'); //excel 文件名称,上级目录Excel 文件夹下的测试用例文档 var excelFilePath = 'testcase-js.xlsx'; var xmlFilePath = '../excel/xmlCase.xml'; //解析xml 结构的属性值 var parser = new xml2js.Parser({ explicitArray: false, attrkey:'$', trim:false, childkey:'$$', attrNameProcessors: null, attrValueProcessors:null }); //构建xml文件的结构 // jons -> xml var jsonBuilder = new xml2js.Builder({ rootName:'testsuite', cdata: true, renderOpts: { 'pretty': true, 'indent': '', 'newline': '\n' }, xmldec:{ 'version':'1.0', 'encoding': 'UTF-8'}}); //调用转换方法: excel2xml(excelFilePath,xmlFilePath); xml2Json(xmlFilePath); function excel2xml(excelFilePath,xmlFilePath) { // 封装函数... //获取到excel的数据文件,将excle文件放到上级Excel 目录下 //示例xml文件保持路径:'../excel/xmlCase.xml' var excelData = xlsxrd.parse("../excel/" + excelFilePath); console.log(excelData.length); var testsuites = {'$':{'name':''},"testcase":[]};//测试套件, _.each(excelData,function(testsuite,i) { console.log("测试套件-----start-------------"); //对所有的测试套件进行处理,获取套件名称和数据。 testsuites.$.name = excelData[i].name; _.each(excelData[i].data,function(testcase,x) { //对套件中的测试用例进行遍历 console.log("测试用例-------start-----------"); console.log(testcase); if(x>0){ let tmpcase = { '$':{'name':testcase[0]}, 'summary':'<p>'+testcase[1]+'</p>', 'preconditions':'<p>'+testcase[2]+'</p>' , 'steps':{"step":[]} }; //构建思路: //根据name 去搜索用例,查找是否能找到相同名称、摘要、预置条件的用例 //如果找到,则拼接step,对steps.step 进行push操作, //如果找不到,则拼接steps信息 //构建步骤 let step = { 'step_number':testcase[3]||'', 'actions':'<p>'+testcase[4]+'</p>', 'expectedresults':'<p>'+testcase[5]+'</p>', "execution_type":"1" }; let casename = testcase[0]; //筛选出用例名称相同的用例(同名的用例永远只能有一个,存在2个时,则取第一个) let tempCases = _.find(testsuites.testcase,function(item) { // body... return item.$.name === casename; }); //判断筛选结果非定义、为空,查不到结果时,直接添加结果 if(!_.isUndefined(tempCases)){ //查找到该对象,在这个对象上增加steps _.find(testsuites.testcase,function(item) { //查找到同名的对象,然后将步骤合并到一条用例上. return item.$.name === casename; }).steps.step.push(step); }else{ //找不到相同名的用例 tmpcase.steps.step.push(step); //添加一条用例 testsuites.testcase.push(tmpcase); } console.log("测试用例-----end-------------"); } }); console.log("测试套件-----end-------------"); }); //转 testsuites 用例格式 //调试时使用固定模式 jsond 作为数据源 var json2xml = jsonBuilder.buildObject(testsuites); fs.writeFileSync('../excel/xmlCase.xml', json2xml, 'utf-8'); } function nameToUpperCase(name){ return name.toUpperCase(); } function xml2Json(FilePath){ // xml -> json '../excel/测试1.testsuite-deep.xml' fs.readFile(FilePath,'utf-8',function(err,result){ //转换xml文件 parser.parseString(result, function (err, result) { console.log('xml解析成json:'+'\n'+JSON.stringify(result)); }); }); }
相关文章推荐
- 使用Java解析xml文件为json格式
- 使用CJSON库实现XML与JSON格式的相互转化
- nodejs在线xlsx转json,使用gulp实现文件更改自动刷新
- 解析通过web.xml文件控制利用过滤器实现编码格式步骤
- C#使用XmlEDocument实现数据文件安全存储功能
- 使用xmlbeans构造符合相应Schema格式的xml文件
- 使用 XStream实现JavaBean 与 XML/JSON 之间相互转换
- 使用asp.net 实现在ie中打开autocad格式文件
- 使用sax将xml文件转成json
- python 使用SAX解析器验证xml文件格式是否完好
- 保存网站或系统的全局配置使用JSON格式保存到文件更轻便!
- python——使用yaml数据格式,PK --> XML,JSON
- Java实现从Excel文件转换成XML文件(二)
- 使用XMLHttpRequest结合struts2实现Ajax异步调用的例子+json插件
- Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据
- 不使用scriptmanager,以xml或json格式调用wcf服务的微软示例
- 关于用dom4j实现xml文件输出时格式设置的发现
- Ajax中使用XML和JSON格式传输的优劣比较
- struts2之使用JSON插件实现Ajax(在struts.xml中处理要序列化的属性)
- 使用xom实现xml文件数据的查找,删除,修改(完整beta版,daya原创)