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.
});
});
};