Thread HTML::TreeBuilder soll case sensitiv arbeiten
(3 answers)
Opened by mcfaq at 2011-05-09 18:32
Hallo.
Ich möchte eine html Datei parsen und dabei die Tags in ihrer Originalschreibweise ausgeben. Mein Ansatz dazu war wie folgt. Datei cpan HTML/TreeBuilder.pm: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sub new { # constructor! my $class = shift; $class = ref($class) || $class; # Initialize HTML::Element part my $self = $class->element_class->new('html'); { # A hack for certain strange versions of Parser: my $other_self = HTML::Parser->new(); %$self = ( %$self, %$other_self ); # copy fields # Yes, multiple inheritance is messy. Kids, don't try this at home. bless $other_self, "HTML::TreeBuilder::_hideyhole"; # whack it out of the HTML::Parser class, to avoid the destructor } Möchte $other_self->case_sensitive("true"); aufrufen, damit der Parser die html tags nicht verändert. Wie schaffe ich das am einfachsten? Ich habe bereits von TreeBuilder geerbt: Datei test.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/perl use lib "/testscript/modules"; use TemplateTreeBuilder; my $rootelement = TemplateTreeBuilder->new(); #Ich dachte durch diese Zeile würde es gehen. Aber Pustekuchen: Aber: Es gibt keine Fehlermeldung ?!? $rootelement->case_sensitive(1); #nicht standart html Tags werden mit in den Baum aufgenommen. $rootelement->ignore_unknown(0); #& in source stays as it is: no decode to & $rootelement->no_expand_entities(1); $rootelement->parse_file($ARGV[0]); Datei TemplateTreeBuilder.pm: 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 #!/usr/bin/perl package TemplateTreeBuilder; use lib "/testproject/modules"; use MyElement; use HTML::TreeBuilder; #inherit from TreeBuilder @ISA = qw(HTML::TreeBuilder); #use parent qw/HTML::TreeBuilder/; #constructor sub new { my $class = shift; $class = ref($class) || $class; #invoke base constructor my $self = $class->SUPER::new(@_); $self->{_element_class}='MyElement'; bless($self, $class); return $self; } return 1; Datei MyElement.pm: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/perl package MyElement; use HTML::Element; #inherit from Element @ISA = qw(HTML::Element); *HTML::Element::_fold_case = \&HTML::Element::_fold_case_NOT; #overwrite the var from base class #constructor sub new { my $class = shift; $class = ref($class) || $class; #invoke base constructor my $self = $class->SUPER::new(@_); bless($self, $class); return $self; } return 1; Für Tips zur richtigen Umsetzung wäre ich dankbar. Gruß mcfaq. modedit Editiert von GwenDragon: Code in Abschnitte geteilt Last edited: 2011-05-10 11:19:51 +0200 (CEST) |