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. |