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);
Quote<MenuGroupxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"Name="EBL_WERKZEUG_1"DisplayName="EBL_WERKZEUG_1">
<MacroGroup Name="EBL_Werkzeug_1Macros">
<MenuMacro UID="ID_02">
<Macro type="Any">
<Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
<ModifiedRev MajorVersion="17" MinorVersion="2" UserVersion="1" />
<Name xlate="true" UID="XLS_0002">Zoom auf Straße und Hausnummer</Name>
<Command>^C^C(C:BJ_TBLOGOUT);-vbarun BJ__POSFIND STR_HSNR EBL_KANAL </Command>
<SmallImage Name="ICBJ0162.BMP" />
<LargeImage Name="ICBJ0162.bmp" />
</Macro>
</MenuMacro>
<MenuMacro UID="ID_03">
<Macro type="Any">
<Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
<ModifiedRev MajorVersion="18" MinorVersion="0" UserVersion="0" />
<Name xlate="true" UID="XLS_0004">Zoom auf Gemarkung/Flur/Flurstück</Name>
<Command>^C^C(C:BJ_TBLOGOUT);-vbarun BJ__POSFIND GEM_F_FL ALK </Command>
<SmallImage Name="ICBJ0161.bmp" />
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
$MacroMenus = {
ID_02 => {
macro_type => 'Any',
rev_major_version => 16,
rev_minor_version => 2,
rev_user_version => 1,
modrev_major_version => 17,
modrev_min_versione => 2,
modrev_user_version => 1,
name_xlate => true,
name_uid => 'XLS_0002',
name_label => 'Zoom auf Straße und Hausnummer',
command => '^C^C(C:BJ_TBLOGOUT);-vbarun BJ__POSFIND STR_HSNR EBL_KANAL ',
small_img => 'ICBJ0162.BMP',
large_img => 'ICBJ0162.BMP',
},
ID_03 => {
macro_type => 'Any',
rev_major_version => 16,
rev_minor_version => 2,
rev_user_version => 1,
modrev_major_version => 18,
modrev_min_versione => 0,
modrev_user_version => 0,
name_xlate => true,
name_uid => 'XLS_0004',
name_label => 'Zoom auf Gemarkung/Flur/Flurstück',
command => '^C^C(C:BJ_TBLOGOUT);-vbarun BJ__POSFIND GEM_F_FL ALK',
small_img => 'ICBJ0161.BMP',
}
};
1
2
3
name_xlate => true,
name_uid => 'XLS_0004',
name_label => 'Zoom auf Gemarkung/Flur/Flurstück',
tag => { att => val };
<tag att='val'>Hier eine Weitere Information</tag>
tag => ['Hier eine Weitere Information', {att => val}]
QuoteIch bin überzeugt davon, dass Dir dein Partner die Daten auch anders liefern kann, mit anders meine ich vor allem besser durchdacht strukturiert