24 Feb

Generare file XML con Node.js

Programming Node.JS

Come sappiamo XML (eXtensible Markup Language) è un metalinguaggio utilizzato per definire linguaggi di markup. In parole più semplici, XML serve a creare nuovi linguaggi definendone le regole. I punti di forza di XML sono:

  • semplicità: è basato su una sintassi caratterizzata da poche regole,
  • interoperabilità: è supportato da una grande varietà di linguaggi di programmazione e tecnologie,
  • estensibilità: gli elementi definiti possono essere estesi e adattati ad altri utilizzi.

Oggi XML è principalmente utilizzato per modellare la struttura di documenti e dati. Possiamo dire che lo ritroviamo un po’ ovunque: nei file di configurazioni delle  applicazioni , nei messaggi che si scambiano i servizi web, nelle interazioni tra database eterogenei, nelle repository di dati salvate su file, ecc.

A volte è necessario generare file XML a supporto della logica delle nostre applicazioni.  Per questo scopo ci vengono in aiuto Node.js e il relativo modulo XMLBuilder.

L’utilizzo di XMLBuilder è estremamente semplice. Il suo punto di forza  è la facilità con la quale si possono mappare in un oggetto javascript le regole e i dati del file XML che si vuole generare.

Per utilizzare XMLBuilder bisogna innanzitutto installare node.js. Il package manager di node permette scaricare il modulo XMLBuilder tramite il comando:

> npm install xmlbuilder

Una volta  installato XmlBuilder in locale ci possiamo “divertire” a generare file XML. Ad esempio, salviamo il seguente codice javascript nel file text.js

var builder = require('xmlbuilder');
var xml = builder.create('root')
  .ele('first')
    .ele('second', {'type': 'attribute text'}, '2nd node text')
  .end({ pretty: true});

console.log(xml);

Lanciamo Node puntando al file javascript:

d:\tmp\xmlbuilder> node test.js
<?xml version="1.0"?>
<root>
  <first_node>
    <second_node type="child">some node text</second_node>
  </first_node>
</root>

Come si vede il modulo XmlBuilder ha generato il file XML seguendo le direttive definite nel file test.js

La cosa più interessante di XmlBuilder è la capacità di generare file XML a partire da oggetti javascript. Ad esempio, per ottenere lo stesso risultato, possiamo modificare il file test.js come segue:

var builder = require('xmlbuilder');
var root = builder.create('root');

var obj = {
  first: {
    second: {
    '#text': '2nd node text',
    '@type': 'attribute text'
    }
  }
};

root.ele(obj);
console.log(root.doc().end({ pretty: true}))

Il file XML viene generato da un oggetto javascript (obj nello script). La direttiva ‘#text’ indica di associare del testo al nodo mentre ‘@’ indica di inserire un attributo. XmlBuilder è molto flessibile e personalizzabile. Il risultato prodotto é identico al precedente:

d:\tmp\xmlbuilder> node test.js
<?xml version="1.0"?>
<root>
  <first>
    <second type="attribute text">2nd node text</second>
  </first>
</root>

Si possono concatenare più oggetti, come nell’esempio sottostante:

var builder = require('xmlbuilder');
var root = builder.create('root');

var obj1 = {
  persona: {
    nome: "Mario",
    '@age': 35,
    indirizzo: {
    citta: "Milano"
    },
    telefono: [
      { '#text': "348-123467", '@type': 'casa' }, 
      { '#text': "348-123567", '@type': 'ufficio' }
    ],
    id: function() {
      return 1;
    }
  }
};

var obj2 = {
  persona: {
    nome: "Maria",
    '@age': 57,
    indirizzo: {
      city: "Bari"
    },
    telefono: [
      { '#text': "345-123467", '@type': 'casa' }, 
      { '#text': "345-123567", '@type': 'ufficio' }
    ],
    id: function() {
      return 2;
    },
    figlio: [
      {nome: "Luigi", '@age': 25},
      {nome: "Giuseppe", '@age': 23},
      {nome: "Antonio", '@age': 19},
    ]
  }
};

root.ele(obj1);
root.ele(obj2);

console.log(root.doc().end({ pretty: true}))

Si ottiene il seguente risultato:

d:\tmp\xmlbuilder>node test.js
<?xml version="1.0"?>
<root>
  <persona age="35">
    <nome>Mario</nome>
    <indirizzo>
      <citta>Milano</citta>
    </indirizzo>
    <telefono type="casa">348-123467</telefono>
    <telefono type="ufficio">348-123567</telefono>
    <id>1</id>
  </persona>
  <persona age="57">
    <nome>Maria</nome>
    <indirizzo>
      <city>Bari</city>
    </indirizzo>
    <telefono type="casa">345-123467</telefono>
    <telefono type="ufficio">345-123567</telefono>
    <id>2</id>
    <figlio age="25">
      <nome>Luigi</nome>
    </figlio>
    <figlio age="23">
      <nome>Giuseppe</nome>
    </figlio>
    <figlio age="19">
      <nome>Antonio</nome>
    </figlio>
  </persona>
</root>

La cosa più interessante di XmlBuilder è la completa integrazione di javascript nella definizione della struttura dei file XML. Questo permette di gestire logiche particolari quando generiamo l’output, soprattutto grazie all’utilizzo di funzioni javascript.

Happy programming!

 

11 Gen

Quando l’informatica aiuta a combattere la povertà

Social - Taking initiative

Una delle storie più commoventi che abbia letto in rete è quella di Eric Elliott. Dopo essere stato obbligato a vendere casa, Eric si ritrova senza un soldo e costretto a girovagare ospitato dagli amici.

Nonostante le avversità, Eric non si perde d’animo e riesce a mettere a rendita quello che gli riesce meglio: sviluppare in Javascript. Grazie alla sua passione e a una grande forza d’animo trova lavoro e mette alle spalle il periodo di crisi.

Il lieto fine fa sicuramente piacere. Ma cosa mi ha emozionato maggiormente in questa storia? Eric fa tesoro della sua esperienza e comincia a promuove il proprio modello nella comunità dei senzatetto. L’approccio non può che essere da programmatore: identificato un problema comune si cerca una soluzione ad ampio spettro.

L’idea è semplice ma efficace, quasi geniale. Eric decide di scrivere un libro di Javascript indirizzato a tutti coloro che vogliono uscire da una condizione di svantaggio. Lo pubblica online insieme ad una serie di training gratuiti per i senzatetto. Inizia una campagna su Kickstarter per sponsorizzare la creazione di nuovi corsi e per coprirne i costi.

Dopo il successo di tutte queste iniziative, Eric lancia il sito JSHomes.org per aumentare la consapevolezza di un problema che ci riguarda tutti molto da vicino.

Nella migliore tradizione open source, il sito diventa spunto per la creazione di una piattaforma dedicata che cerca di coinvolgere il maggior numero di volontari possibili a sostegno dell’illuminante idea di Eric.

Condivido questa bellissima iniziativa che dimostra come una condizione di disagio possa trasformarsi in una storia di successo.

Storia pubblicata su Medium.com il 6 Novembre, 2015