Leser: 17
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
(...)
+C<span id="C">
C A
C B
C C
C D
C E</span>
+D<span id="D">
+D A<span id="DA">
D A A
D A B
D A C
D A D</span>
D B
D C
+D D<span id="DD">
D D A
D D B
D D C
D D D</span></span>
+E<span id="E">
E A
E B</span>
+F<span id="F">
(...)
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
A A
A B
A C
A D
B
B A
B B
B C
C
C A
C B
C C
C D
C E
D
D A
D A A
D A B
D A C
D A D
D B
D C
D D
D D A
D D B
D D C
D D D
E
E A
E B
F
F A
F B
F C
F D
F E
F F
F G
F H
F I
F J
F K
F L
F M
F N
F O
F P
F Q
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %tree=(); # baum erstellen while(my $line=<DATA>) { chomp($line); $line=~s/^\s+//; $line=~s/\s+$//; my @elm=split(/\s+/,$line); my $ref=\\%tree; $ref=\$$ref->{$_} for(@elm); $$ref={} unless($$ref); } # baum darstellen print create(\%tree); sub create { my $tree=shift; my $deep=shift || ''; my $line=shift || []; my $ret=''; for my $key (sort keys(%$tree)) { my @in=(@$line,$key); my $ref=$tree->{$key}; if(keys(%$ref)) { $ret.=qq($deep+@in<span id=").join('',@in).qq(">\n); $ret.=create($ref,"$deep ",\@in); chomp($ret); $ret.="</span>\n"; } else { $ret.="$deep@in\n"; } } return $ret; } __DATA__ A A A A B A C A D B B A B B B C C C A C B C C C D C E D D A D A A D A B D A C D A D D B D C D D D D A D D B D D C D D D E E A E B F F A F B F C F D F E F F F G F H F I F J F K F L F M F N F O F P F Q
1
2
3
4
5
6
7
A|text|link|expandet
A A|text|link
A B|text|link
B|text|link|nonexpandet
B A|text|link
B B|text|link
B B A|text
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
#!/usr/bin/perl use strict; use warnings; my %tree=(); my %txt=(); # baum erstellen while(my $line=<DATA>) { chomp($line); my $text=''; ($line,$text)=$line=~/\s*([^\|]+?)\|(.+?)\s*$/; my @elm=split(/\s+/,$line); $txt{"@elm"}=[split(/\s*\|\s*/,$text)]; my $ref=\\%tree; $ref=\$$ref->{$_} for(@elm); $$ref={} unless($$ref); } # baum darstellen print create(\%tree,\%txt); sub create { my $tree=shift; my $txt=shift; my $deep=shift || ''; my $line=shift || []; my $ret=''; for my $key (sort keys(%$tree)) { my @in=(@$line,$key); my $text=$txt->{"@in"}; $text=[] unless($text); $text=join("--",@$text); my $ref=$tree->{$key}; if(keys(%$ref)) { $ret.=qq($deep+@in ($text) <span id=").join('',@in).qq(">\n); $ret.=create($ref,$txt,"$deep ",\@in); chomp($ret); $ret.="</span>\n"; } else { $ret.="$deep@in ($text)\n"; } } return $ret; } __DATA__ A|text|link|expandet A A|text|link A B|text|link B|text|link|nonexpandet B A|text|link B B|text|link B B A|text
Guest Mayflow
Das Modul HTML::TREEBUILDER habe ich leider nicht und kann es auch nicht installieren (keine Root-Rechte) - aber darüber hinaus würde es mir wohl eh nicht helfen, da es nur die schon vorhandene Struktur (oder in ähnlicher Form) anlegt, aber ein parsen / walkthrough fehlt mir einfach und auch alles Probieren hilft mir ab diesem Punkt nicht mehr :(
Guest MayflowDas nützt aber nur bedingt etwas.im falle von HTML::TreeBuilder hast du es sogar sehr leicht, denn es ist pureperl, weshalb die "kopieren"-methode aus der FAQ völlig ausreichen sollte.