1 2 3 4 5 6 7 8 9 10 11 12
<?xml version="1.0" encoding="UTF-8"?> <Profile origin="get" version="2.1" date="2013.05.20"> <Catalog id="sys" version="2.1"> <Parameter name="prim" value="2"/> <Parameter name="second" value="3"/> <Parameter name="copy" value="4"/> <Parameter name="force" value="1"/> <Parameter name="always" value="0"/> <Parameter name="type" value="5" Type="False"/> <Parameter name="memory" value="allow"/> </Catalog> </profile>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#!/usr/bin/perl use strict; use warnings; use XML::Simple; my $parser = XML::Simple->new( KeepRoot => 1 ); # Création du fichier résultat my $FichierResulat = 'resultat.txt'; open( my $FhResultat, '>', $FichierResulat ) or die("Impossible d'ouvrir le fichier $FichierResulat\n$!"); my $doc = $parser->XMLin('compute_sys.xml'); # Tout le fichier XML est dans $doc sous forme d'arbre foreach my $Catalog (@{ $doc -> {Catalog}->{name}}){ print {$FhResultat} ""; print {$FhResultat} str_if ($Catalog->{name}); print {$FhResultat} ""; print {$FhResultat} str_if ($Catalog->{value}); } close($FhResultat); sub is_array { my ($var) = @_; return ( ref($var) eq 'ARRAY' ); } sub str_if { my ( $str, $default ) = @_; return $default unless $str; return $str; }
1 2 3 4 5 6 7 8
use Data::Dumper; use XML::Simple qw(:strict); my $ref = XMLin( 'compute_sys.xml', ForceArray => 1, KeyAttr => [], ); print Dumper($ref);
2015-04-01T03:45:58 biancaIch würde sowieso $parser = XML::Simple->new... komplett weg lassen, braucht man das?
$parser = XML::Simple->new...
2015-04-01T09:45:34 pqJa ok, dann muss er es selbst entscheiden.wenn man nicht bei jedem aufruf alle parameter für XMLin neu übergeben will?
2015-04-01T09:45:34 pqSagt mir nichts aber ich wollte auch nichts kaputt machen. Mir sah das nur sehr umständlich aus. Aber wenn diese Objektorientierung besser ist soll er das halt machen.da nutzt jemand objektorientierung und du redest es ihm aus?
$parser = XML::Simple->new...
compute,prim,second,copy,forced,always,type,memory,name1,name2,.........
print $FhResultat "";
2015-04-01T08:34:35 clmsAußerdem sieht print {$FhResultat} ""; komisch aus.
Ist an dieser Stelle ein Compute-Block zulässig?
http://perldoc.perl.org/functions/print.htmlIf you're storing handles in an array or hash, or in general whenever you're using any expression more complex than a bareword handle or a plain, unsubscripted scalar variable to retrieve it, you will have to use a block returning the filehandle value instead, in which case the LIST may not be omitted:
print { $files[$i] } "stuff\n";
print { $OK ? STDOUT : STDERR } "stuff\n";