Показать сообщение отдельно
  #1 (permalink)  
Старый 20.05.2019, 14:43
Новичок на форуме
Отправить личное сообщение для RichardRow Посмотреть профиль Найти все сообщения от RichardRow
 
Регистрация: 20.05.2019
Сообщений: 2

Загрузка из 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-ом владею достаточно плохо. На форуме аналогичной темы не нашёл, хотя мог просмотреть.
Ответить с цитированием