2019-09-10 00:27:23 +07:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const util = require('./util');
|
|
|
|
|
|
|
|
const convertToJson = function(node, options) {
|
|
|
|
const jObj = {};
|
|
|
|
|
|
|
|
//when no child node or attr is present
|
|
|
|
if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {
|
|
|
|
return util.isExist(node.val) ? node.val : '';
|
|
|
|
} else {
|
|
|
|
//otherwise create a textnode if node has some text
|
|
|
|
if (util.isExist(node.val)) {
|
|
|
|
if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {
|
2019-12-13 21:19:15 +07:00
|
|
|
if(options.arrayMode === "strict"){
|
|
|
|
jObj[options.textNodeName] = [ node.val ];
|
|
|
|
}else{
|
|
|
|
jObj[options.textNodeName] = node.val;
|
|
|
|
}
|
2019-09-10 00:27:23 +07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-13 21:19:15 +07:00
|
|
|
util.merge(jObj, node.attrsMap, options.arrayMode);
|
2019-09-10 00:27:23 +07:00
|
|
|
|
|
|
|
const keys = Object.keys(node.child);
|
|
|
|
for (let index = 0; index < keys.length; index++) {
|
|
|
|
var tagname = keys[index];
|
|
|
|
if (node.child[tagname] && node.child[tagname].length > 1) {
|
|
|
|
jObj[tagname] = [];
|
|
|
|
for (var tag in node.child[tagname]) {
|
|
|
|
jObj[tagname].push(convertToJson(node.child[tagname][tag], options));
|
|
|
|
}
|
|
|
|
} else {
|
2019-12-13 21:19:15 +07:00
|
|
|
if(options.arrayMode === true){
|
|
|
|
const result = convertToJson(node.child[tagname][0], options)
|
|
|
|
if(typeof result === 'object')
|
|
|
|
jObj[tagname] = [ result ];
|
|
|
|
else
|
|
|
|
jObj[tagname] = result;
|
|
|
|
}else if(options.arrayMode === "strict"){
|
|
|
|
jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];
|
|
|
|
}else{
|
|
|
|
jObj[tagname] = convertToJson(node.child[tagname][0], options);
|
|
|
|
}
|
2019-09-10 00:27:23 +07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//add value
|
|
|
|
return jObj;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.convertToJson = convertToJson;
|