XML::Simple
# il file di esempio (esempio.xml)
<esempio>
<numero valore="42">quarantadue</numero>
<stringhe>
<stringa numero="1">foo</stringa>
<stringa numero="2">bar</stringa>
<stringa numero="3">baz</stringa>
</stringhe>
</esempio>
# lo script che legge il file con XML::Simple
use Data::Dumper;
use XML::Simple;
my $XML = XMLin('esempio.xml');
$Data::Dumper::Indent = 1;
print Dumper($XML);
# l'output dello script
$VAR1 = {
'numero' => {
'content' => 'quarantadue',
'valore' => '42'
},
'stringhe' => {
'stringa' => [
{
'numero' => '1',
'content' => 'foo'
},
{
'numero' => '2',
'content' => 'bar'
},
{
'numero' => '3',
'content' => 'baz'
}
]
}
};
E' possibile andare a manipolare direttamente la struttura ricevuta da XMLin, per poi passarla ad XMLout, che genererà un nuovo XML con le modifiche da noi effettuate.
push(
@{ $XML->{stringhe}->{stringa} },
{ numero => 4, content => "qux" }
);
open(ESEMPIO, ">esempio.xml");
print ESEMPIO XMLout($XML);
close(ESEMPIO);
Il risultato sarà un nuovo file esempio.xml che conterrà anche la nostra nuova stringa:
<opt>
<numero valore="42">quarantadue</numero>
<stringhe>
<stringa numero="1">foo</stringa>
<stringa numero="2">bar</stringa>
<stringa numero="3">baz</stringa>
<stringa numero="4">qux</stringa>
</stringhe>
</opt>
Ci sono numerose opzioni (molto ben documentate) per affinare il comportamento di XML::Simple. Il modulo non è ovviamente consigliato per lavorare con quantità di dati ragguardevoli, nel qual caso è sicuramente più efficiente costruirsi un parser con XML::Parser o XML::SAX. Il modulo è studiato specificatamente per piccole basi di dati, come ad esempio file di configurazione. |