Thread Eingerückte hierarchische Liste (HTML) erzeugen
(9 answers)
Opened by GwenDragon at 2023-12-21 11:45
Das mit den geschachtelten HTML-Listen verstehe ich nicht: Du hast in Deinem Beispiel Sprünge um zwei Einheiten "nach unten" (0 -> 2 und 1 -> 3). In einer geschachtelten HTML-Struktur geht es immer nur um eine Stufe "nach unten", wenn eine untergeordnete Liste aufgemacht wird. Die bekommt dann ein neues Bullet oder eine Nummer, zwei Bullets unmittelbar hintereinander sehen eigentlich immer falsch aus. "Nach oben" können aber beliebig viele Hierarchiestufen auf einmal wegfallen.
Man kann das entweder mit Rekursion lösen, wie von rosti vorgeschlagen, oder direkt die Liste durcharbeiten. 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 use 5.024; use strict; use warnings; my @list_data = ( { indent => 0, text => "Test 1" }, { indent => 2, text => "Test 2" }, { indent => 1, text => "Test 3" }, { indent => 1, text => "Test 4" }, { indent => 3, text => "Test 5" }, ); my $type = q(ol); my $level = -1; my $html = q(<!DOCTYPE html>); for my $element (@list_data) { if ($level < $element->{indent}) { # Stufen einfuegen $html .= qq(<$type><li>) x ($element->{indent} - $level); } elsif ($level > $element->{indent}) { # Stufen schliessen $html .= qq(</li></$type><li>) x ($level - $element->{indent}); } else { # Gleiche Ebene $html .= q(</li><li>); } $level = $element->{indent}; $html .= $element->{text}; } # Cleanup: Close open lists $html .= q(</li></ol>) x ($level+1); print $html; |