Thread xml aus array schreiben
(10 answers)
Opened by protag at 2010-06-17 12:29 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #!/usr/bin/perl use strict; use warnings; use IO::Handle; my $stream = IO::Handle->new; die "Unable to open __DATA__." unless $stream->fdopen(fileno(DATA), "r"); &write_document_start; &traverse( $stream ); &write_document_end; sub traverse { my ($stream, $line) = @_; $line = $stream->getline unless defined $line; while(defined $line) { chomp $line; my ($id, $level, $text) = split /;/, $line; my $next = $stream->getline; my $is_empty = not defined $next; unless($is_empty) { chomp $next; my ($id2, $level2, $text2) = split /;/, $next; $is_empty = $level2 == $level; } &write_node($id, $level, $text, $is_empty); unless( $is_empty ) { &traverse( $stream, $next ); &write_node_end( $level ); $line = $stream->getline; } else { $line = $next; } } } sub write_node { my ($id, $level, $text, $is_empty) = @_; my $ident = "\t" x $level; print qq~$ident<node ID="$id" TEXT="$text"~; print " /" if $is_empty; print ">\n"; } sub write_node_end { my ($level) = @_; my $ident = "\t" x $level; print "$ident</node>\n"; } sub write_document_start { print qq~<map version="0.9.0">\n~; } sub write_document_end { print qq~</map>\n~; } __DATA__ 0;0;Systemebene 1;1;Gruppe 1 2;1;Gruppe 1 5;2;Gruppe 2 5;2;Gruppe 2 601;3;Gruppe 3 60100;4;Teil |