#!/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('', ) ); 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);