Parser des gros fichiers XML avec Node.js, xml-stream

07/07/2018
écrit par: ddtraceweb

Nous allons ici comment parser de gros fichier xml de plusieurs giga sans dépassement de mémoire.

Nous allons utiliser la lib, "xml-stream" pour se faire :

 

// npm install xml-stream --save
// npm install fs --save
// npm install path --save

let XmlStream = require('xml-stream');
let fs = require('fs');
let path = require('path');

// nous récupérons le fichier où il se trouve dans votre arborescence de dossiers.
let PATH_IMPORT = path.join(__dirname, '/../../../import/import.xml');

exports.stream = function() {

      let stream = fs.createReadStream(PATH_IMPORT);//Nous utilise fs pour streamer le fichier et commencer la lecture dès les premières lignes de disponibles sans prendre trop de mémoire sur le serveur.

      let xml = new XmlStream(stream);

      xml.on('endElement: thread', function(item) { 

//sur chaque élement souhaité on va le parser et s'arrêter à la fin de l'élément ce qui permet de ne pas consommer trop de mémoire.

// nous obtenons un objet javascript facilement manipulable.

        if(item.link)
        {
          let thread = {};

          thread.page_title = item.title;

          //traitement...
        }

      });

      xml.on('error', function (err) {
        console.log(err); // si nous avons une erreur, nous pouvons la récupérer de cette façon et en faire ce que l'on souhaite.
      });

      xml.on('end', function() {
        //TODO : à la fin du traitement nous pouvons déclencher un autre traitement éventuellement.
      });

    });
};