Thread xml tiefer auslesen
(5 answers)
Opened by jan99 at 2015-08-14 07:52
Moin !
ich habe mal ein Skript gesucht um einfach XML-Daten auslesen zu können: Code (perl): (dl
)
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 33 34 35 36 #!/usr/bin/perl # Quelle: http://linux.ittoolbox.com/groups/technical-functional/linuxadmin-l/xml-to-csv-by-perl-script-4395356 use warnings; use strict; use XML::XPath; # Parameter 1: Dateiname der XML-Datei OHNE Suffix # Ausgabe-Datei wird automatisch als CSV auf Basis von Parameter 1 generiert # bei findnodes ist der Knoten anzugeben ab welchem die Daten ausgelesen werden sollen. # das Ergebnis wird in die Datei und die Commandozeile geschrieben my $xml_file = $ARGV[0].".cui"; my $csv_file = $ARGV[0].".txt"; open(my $fh, '>>', $csv_file) || die "Error to open cui-file:$!"; # Musterdaten aus dem DATA-Abschnitt #my($xp) = XML::XPath->new( join('', <DATA>) ); my $xp = XML::XPath->new(filename=>$xml_file); # hier wird der Punkt der Ebenen über den gesuchten Daten angegeben my(@records) = $xp->findnodes( '/MenuGroup/MacroGroup/MenuMacro' ); my($firstTime) = 0; foreach my $record ( @records ) { my(@fields) = $xp->find( './child::*', $record )->get_nodelist(); unless ( $firstTime++ ) { print( join( ';', map { $_->getName() } @fields ), "\n"); print $fh ( join( ';', map { $_->getName() } @fields ), "\n"); } print( join( ';', map { $_->string_value() } @fields ), "\n"); print $fh (join( ';', map { $_->getName() } @fields ), "\n"); } close($fh); Damit habe ich bisher eine flache Struktur ausgelesen. Nun soll folgende Struktur ausgelesen werden: Quote Irgendwie bin ich mit dem Thema XML in Perl noch nicht weiter gekommen. Kann mir einer weiterhelfen? Gruß Jan perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de
|