Newer
Older
ade-outils-xml / tools / sax-parser-sample.js
#!/usr/bin/env node

var expat = require('node-expat');
var parser = new expat.Parser("UTF-8");
var fs = require("fs");
var _ = require("lodash");

process.stdin.setEncoding('utf8');

var profondeur = 0;

// Évément déclenché sur balise ouvrante
parser.on('startElement', function(name, attrs) {

  //affichage du nom de l'élément ouvrant
  console.log(indentation() + "{ nomElement : \"" + name + "\"");

  //affichage des attributs si pertinent
  if (Object.keys(attrs).length > 0) {
    _.forIn(attrs, function(attrValue, attrName) {
      console.log(indentation() + "  attributs : [");
      console.log(indentation() + "    { nom: \"%s\", valeur: \"%s\"}", attrName, attrValue);
      console.log(indentation() + "  ]");
    });
  }

  profondeur++;

});

// Évément déclenché sur balise fermante
parser.on('endElement', function(name) {
  profondeur--;
  console.log(indentation() + "}");
});

// Évément déclenché sur noeud texte
parser.on('text', function(txt) {
  //affichage des noeuds texte non vide
  if (txt.trim() !== "") {
    console.log(indentation() + "texte : \"" + txt + "\"") ;
  }
});

// Évément déclenché sur commentaire
parser.on('commentaire', function(txt) {
  //affichage des commentaires
  console.log(indentation() + "comment : \"" + txt + "\"");
});

var indentation = function() {
  var res = "";
  for (var i=0; i < profondeur; i++) res += "  ";
  return res;
};

var xmlContent = fs.readFileSync(process.argv[2]);

parser.write(xmlContent);