#!/usr/bin/perl use strict; use warnings; use HTML::TreeBuilder; my $html_data=<<'HTML'; test

Inhalt

blablablabla 123123123123asdfasdf 43214321fdsafdsafdsa

HTML my $html = HTML::TreeBuilder->new(); $html->parse($html_data); # erst das passende "h4" suchen # und dann auf das nachfolgende "p" zugreifen my $h4 = $html->look_down( # wir suchen nach einem "TAG" # und der soll "h4" lauten _tag => 'h4', # führe die den code aus wenn die Bedingung stimmt: # Wenn 1 zurückgeliefert wird haben wir was wir wollen sub { # ist das Attribut "style" gesetzt? return 0 if(! $_[0]->attr('style')); # enthält der Inhalt von "style" "float:left"? return 0 if( $_[0]->attr('style')!~/float:left/); # ist ein Inhalt vorhanden? return 0 if(! $_[0]->as_text()); # ist das nachfolgende Element von Typ "p"? return 0 if( $_[0]->parent()->content()->[$_[0]->pindex()+1]->tag() ne 'p'); return 1; }); if($h4) { # etwas wurde gefunden # den Inhalt ausgeben print "H4 => ".$h4->as_text()."\n"; # das nächste Element bezogen auf "H4" # also # h4 # -> # übergeordentes element (hier body) # -> # Position von h4 +1 ==> p my $p=$h4->parent()->content()->[$h4->pindex()+1]; print "P => ".$p->as_text()."\n"; } print "#"x70,"\n"; # alternative Variante: # erst "p" suchen und dann auf "h4" schließen my $p = $html->look_down( # wir suchen nach einem "TAG" # und der soll "p" lauten _tag => 'p', # führe die den code aus wenn die Bedingung stimmt: # Es muß ein Inhalt vorhanden sein # und das vorherige elemnet muss vom typ "h4" sein sub { # ist überhaupt ein inhalt da? return 0 if(! $_[0]->as_text()); # wir wollen das erste

was gefunden wird, # dessen vorheriges element "h4" ist return 1 if( $_[0]->parent()->content()->[$_[0]->pindex()-1]->tag() eq 'h4' ); return 0 }); if($p) { print "P => ".$p->as_text()."\n"; # das vorherige Element bezogen auf "p" my $h4=$p->parent()->content()->[$p->pindex()-1]; print "H4 => ".$h4->as_text()."\n"; } $html->delete();