Загрузка из XML
Всем доброго времени суток.
Есть скрипт загрузки из 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-ом владею достаточно плохо. На форуме аналогичной темы не нашёл, хотя мог просмотреть. |
Решение для данного вопроса
if(fullXML.Report.ds[i].i){
for(var j=0;j<fullXML.Report.ds[i].i.length;j++){ let calls = fullXML.Report.ds[i].i[j]['$'].f if (parseFloat (calls) > 0){ detallization.tel[i].callsAll.push({ 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, }) } } } |
Часовой пояс GMT +3, время: 06:14. |