Всем доброго времени суток.
Есть скрипт загрузки из XML в MongoDB:
var fs = require('fs'),
xml2js = require('xml2js');
var MongoClient = require("mongodb").MongoClient;
var fullXML;
var parser = new xml2js.Parser();
var year = 2018;
var month = 'June';
var detellization;
fs.readFile('File.xml','utf-8',function(error,data){
console.log('Read...');
parser.parseString(data,function (error,result){
fullXML = result;
detallization ={
tel: []
};
for (var i=0;i<fullXML.Report.tp.length;i++){
detallization.tel[i]= {
phoneNumber:fullXML.Report.tp[i]['$'].n,
servicesSum:fullXML.Report.tp[i]['$'].a,
callsSum:fullXML.Report.ds[i]['$'].f,
tariff:fullXML.Report.tp[i].ts[0]['$'].n,
callsAll:[],
service:[],
year:year,
month:month
};
if(fullXML.Report.tp[i].ss){
for (var j = 0; j < fullXML.Report.tp[i].ss.length; j++) {
detallization.tel[i].service[j]={
nameService:fullXML.Report.tp[i].ss[j]['$'].n,
sumSer:fullXML.Report.tp[i].ss[j]['$'].a
}
}
}
//Парсим ветку DS
if(fullXML.Report.ds[i].i){
for(var j=0;j<fullXML.Report.ds[i].i.length;j++){
detallization.tel[i].callsAll[j]={
date:fullXML.Report.ds[i].i[j]['$'].d,
oneService:fullXML.Report.ds[i].i[j]['$'].n,
priceService:fullXML.Report.ds[i].i[j]['$'].f,
time:fullXML.Report.ds[i].i[j]['$'].du,
}
}
}
}
MongoClient.connect("mongodb://localhost:27017/mtc",function (err,db){
db.collection("mtc").insertMany(detallization.tel, function (err,result) {
if (err){return console.log(err);}
console.log(result.ops);
db.close();
});
});
console.log(detallization);
});
});
Сам скрипт работает, вопросов по нему нету, но необходимо пропускать значения равные нулю в данном месте
priceService:fullXML.Report.ds[i].i[j]['$'].f,
Лично у меня не хватает знаний по данному вопросу, может кто-то помочь? Я понимаю, что дело решается, скорее всего, простой конструкцией наподобие:
if(fullXML.Report.ds[i].i){
for(var j=0;j<fullXML.Report.ds[i].i.length;j++){
if(fullXML.Report.ds[i].i[j]['$'].f > 0){
detallization.tel[i].callsAll[j]={
date:fullXML.Report.ds[i].i[j]['$'].d,
oneService:fullXML.Report.ds[i].i[j]['$'].n,
priceService:fullXML.Report.ds[i].i[j]['$'].f,
time:fullXML.Report.ds[i].i[j]['$'].du,}}}
Приведённая конструкция не работает, а у меня лично не хватает понимания что и как правильно расположить, поскольку JS-ом владею достаточно плохо. На форуме аналогичной темы не нашёл, хотя мог просмотреть.