Schrift
[thread]7511[/thread]

Passendes End Tag gesucht



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
J-jayz-Z
 2005-11-29 23:22
#60574 #60574
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,
ich versuch mich gerade daran, ein passendes end tag aus HTML zu finden, es gelingt mir aber irgendwie nicht wirklich...
Um Hilfe würde ich mich freuen !
Hier mein Ansatz
Code: (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
#!/usr/bin/perl
use strict;
use warnings;

my $html = "<div id='cont'>eins<div>zwei<div>drei<div>vier</div></div></div></div>";

content($html, "cont");

print "\n";

sub content {
my $html = shift;
my $name = shift;
$html =~ m/.*?\<(.*?).*?\s+(?:id|name)\s*=\s*['"]$name['"].*?\>(.*)\<\/\1\>.*?/s;
my $tag = $1;
my $content = $2;
my $i = 0;
my ($main, $counter);
$content =~ m/(.*?)\<\/$tag\>/s;
$main = $1;
if($main =~ m/.*?\<$tag.*?\>.*?/) {
$counter = () = $content =~ m/\<$tag.*?\>/g;
} else {
$counter = () = $main =~ m/\<$tag.*?\>/g;
}
my @end = split /\<\/$tag\>/, $content;
for(0..$#end) {
if($_ == $#end-1) {
$end[$_] = $end[$_]."</$tag>";
}
}
print $counter . " mal\n";
for(0..$counter) {
print $end[$_];
}
}

Allerdings ist hier mein Problem, das split das Element ja enfernt, und wenn ich das so schreibe, springt warnings an. Er kann nichts anhängen, wo es offiziell ja gar nichts gibt. Also wenn zwei mal hintereinander </$tag> da steht. das kommt leider recht häufig vor ... :(
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-11-29 23:31
#60575 #60575
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und was hast du eigentlich vor?
J-jayz-Z
 2005-11-29 23:45
#60576 #60576
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich will den Inhalt zwischen dem Start und dem End Tag haben. Aber es sollte auch verschachtelt sein können ...
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-11-30 00:58
#60577 #60577
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und wieso nimmst du kein modul, und wieso muss es immer regexp sein ?
J-jayz-Z
 2005-11-30 01:01
#60578 #60578
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wie soll man das sonst machen, wenn nicht mit regex?
Ich kenn kein Modul, das genau das macht ...
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-11-30 01:46
#60579 #60579
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
HTML::Parser oder HTML::TreeBuilder

Bsp:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new;
$tree->parse("<div id='cont'>eins<div>zwei<div>drei<div>vier</div></div></div></div>");
$tree->dump;
^Z
<html> @0 (IMPLICIT)
<head> @0.0 (IMPLICIT)
<body> @0.1 (IMPLICIT)
<div id="cont"> @0.1.0
"eins"
<div> @0.1.0.1
"zwei"
<div> @0.1.0.1.1
"drei"
<div> @0.1.0.1.1.1
"vier"
\n\n

<!--EDIT|esskar|1133308044-->
J-jayz-Z
 2005-11-30 02:00
#60580 #60580
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
hmm, danke mal.
kann mit meinem code den keiner was anfangen ? :(
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-11-30 02:40
#60581 #60581
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=J-jayz-Z,30.11.2005, 01:00]hmm, danke mal.
kann mit meinem code den keiner was anfangen ? :([/quote]
schon, aber es ist doch unnötig!
renee
 2005-11-30 03:55
#60582 #60582
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu CPAN:HTML::Parser findest Du auch ein paar Code-Beispiele im Wiki...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
J-jayz-Z
 2005-11-30 10:48
#60583 #60583
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
okay, das beispiel im Wiki hilft mir weiter. Danke !
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2005-11-29 23:22.