#!/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);