Thread HTML-Parser und leere Elemente (3 answers)
Opened by GwenDragon at 2008-01-25 13:02

GwenDragon
 2008-01-25 19:55
#105174 #105174
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ich dachte, ich müsste irgendwie HTML-Tagfilter patchen.
Bin halt über #22135: self-closing tags are improperly rewritten gestolpert.

Ach ja, HTML::TagFilter ist ja ein Kind von HTML::Parser.

Geht auch anders, wie ich sehe und löst obigen Bug ;)

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
34
35
36
37
38
39
40
41
42
#!/usr/local/bin/perl

use strict;
use warnings;

use lib "lib";
use HTML::TagFilter;

my $p = HTML::TagFilter->new (
        strip_comments=>1,
);

#eval { $p->strict_comment(1) };
#eval { $p->strict_names(1) };
#eval { $p->strict_end(1) };
#eval { $p->empty_element_tags(1) };
eval { $p->xml_mode(1) };
#eval { $p->marked_sections(1) };

$p->parse(<<'HTML');
        <body onload="aaa">
                <p onclick="a"><img onclick="AAAA" src="a" alt="99" /></p>
                <p />
                <div>
                        <br />
                        <hr                    />
                        <a href="a"/></div>
                <script/>
        </body>

</html>
HTML

my $report = $p->report;
print STDERR '-' x 30, "\n", "Report: \n", $report, "\n", '-' x 30, "\n\n"
        if defined $report;

my $error_log = $p->error;
print STDERR '-' x 30, "Errors: \n", "\n", $error_log, "\n", '-' x 30, "\n\n"
        if length $error_log;

print $p->output;


Ich habe einfach mal im Fall von XHTML bei HTML::Parser mit eval { $p->xml_mode(1) }; den XML-Modus eingeschhaltet und siehe da:

Aus
<img onclick="AAAA" src="a" alt="99" />
wird
<img src="a" alt="99"></img>

Was nach XML korrekt ist.

View full thread HTML-Parser und leere Elemente