# xmind转自测系统导入格式
分两部分
# xmind-json
# 读取xmind
直接使用
fs.readFileSync
# jszip
使用jszip解析xmind。直接fs读的话js无法操作。
const zip = new JSZip();
//解压缩xmind文件
const res = await zip.loadAsync(this.data, {
optimizedBinaryString: true
});
解析出的对象中的content.xml就是所需的数据
通过jszip的file方法将content.xml对象字符化
await res.file(file.name).async('string')
# xml-formatter
将content.xml字符转为正常格式的xml
const format = require('xml-formatter')
format(fileVal, {
collapseContent: true
})
# xml-js
将xml转成json
const convert = require('xml-js')
const json = JSON.parse(convert.xml2json(xml), {
compact: true,
spaces: 4
}));
# 处理json
得到的json很多无用的层级、数据,需要进一步精简。同时对xmind中特殊符号需要进行处理
通过递归解析出树形结构
let node = {
children: this.transformChildren(topic || children, imgFiles),
data: {
text: this.transformText(data),
remark: this.transformRemark(data),
label: this.transformLabel(data),
image: this.transformImage(data, imgFiles),
markers: this.transformMarker(data)
}
};
# json-xlsx
对json按照自测平台的字段,递归解析出来。
再转为xlsx
const xlsx = require('xlsx');
let ss = xlsx.utils.json_to_sheet(this.cases);
let workbook = {
SheetNames: ['测试用例'],
Sheets: {
'测试用例': Object.assign({}, ss)
},
};
xlsx.writeFile(workbook, this.output);