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!
Facebook
LinkedIn
Pinterest