tomalv Skrevet 18. mars 2010 Del Skrevet 18. mars 2010 Vi skal hente ut flere tags i samme xml-fil, problemet med dette scriptet er at den hopper ut av filen på første treff, dermet får vi ikke ut de gjenværende tags'ene fra samme xml-filen. Er det noen som kan hjelpe meg med dette? #!/usr/bin/perl use warnings; use strict; use XML::Simple; use Data::Dumper; my $data; my $xml; my $file; my @files; # $xml = new XML::Simple(keeproot => 1, searchpath => "/home/hoved/WAAP"); $xml = new XML::Simple; opendir(DIR, "/home/folder/"); @files = readdir(DIR); closedir(DIR); foreach $file (@files){ next if ($file eq "." or $file eq ".."); print $file . "\n"; $data = $xml->XMLin("/home/folder/$file"); if ( $data->{tag1}->{tag2}->{tag3}->{content} ) { print "$data->{tag1}->{tag2}->{tag3}->{content}${ }elsif ( $data->{tag1}->{tag4}->{tag5} ){ print "$data->{tag1}->{tag4}->{tag5}\n"; }elsif ( $data->{tag1}->{tag4}->{tag5}->{content} ){ print "$data->{tag1}->{tag4}->{tag5}->{content}\n"$ }else{ print "fant ingenting.\n"; } } Her er link til ett bilde der vi kjører scriptet og får HASH-feilmelding Hvis det mangler noe info så spør, så skal jeg gi mer. Lenke til kommentar
gizzlon Skrevet 18. mars 2010 Del Skrevet 18. mars 2010 (endret) Hei først noen tips: vet ikke hva opendir() er, men antagelig kan du bare si: foreach my $file ( glob('/home/*.xml') ){ - hvis rekkefølgen på elementer i xml filen er viktig (<foo><første/><andre/></foo>), kan XML::Simple gi deg problemer.. been there.. Men er forsåvidt dokumentert så.. Den hopper ikke egentlig ut. Du spørr bare etter én tag når du bruker if, else. Hvis jeg ikke husker feil er $data en vanlig perl struktur, lett å bruke når man har lært det, men vanskelig i starten. Du må bare hente ut alt du vil ha derfra før neste iterasjon av foreach hvor du åpner en ny fil og setter $data til noe annet. Data::Dumper er din venn.. som i # untested use Data::Dumper; #... print Dumper($data->{tag1}); Endret 18. mars 2010 av gizzlon Lenke til kommentar
gizzlon Skrevet 18. mars 2010 Del Skrevet 18. mars 2010 Ops, glemet å sjekke ut bildet ditt.. det der er ikke en feilmelding. Du prøver å printe en hash (eller referanse til en hash er det kanskje). Data::Dumper, som over , kan printe slike strukturer. gjør deg selv en tjeneste, og sles dette før du bruker XML::Simple: http://perldoc.perl.org/perlreftut.html Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå