Schrift
[thread]11186[/thread]

HTML-Parser und leere Elemente

Leser: 2


<< >> 4 Einträge, 1 Seite
GwenDragon
 2008-01-25 13:02
#105150 #105150
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Ich will mit CPAN:HTML-TagFilter bestimmte Elemente von HTML filtern.

Jetzt habe ich aber das Problem, dass es mir aus XHTML bzw. Elementen, die auch wieder imlicit geschlossen sind, HTML macht.
Das bedeutet, dass aus
Code: (dl )
<img src=test.jpg />
dann
Code: (dl )
<img src="test.jpg">
wird, was natürlich falsch ist.
Es muss dann nämlich
Code: (dl )
<img src="test.jpg" />
sein!

In der Doku zu HTML-Parser steht, dass:
Quote
Empty element tags look like start tags, but end with the character sequence "/>" instead of ">". When recognized by HTML::Parser they cause an artificial end event in addition to the start event. The text for the artificial end event will be empty and the tokenpos array will be undefined even though the the token array will have one element containing the tag name.


Wie kann ich das am besten lösen, dass mir das implizite Schließen des Elements nicht verloren geht?
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

renee
 2008-01-25 13:28
#105151 #105151
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Auf Anhieb habe ich nichts gefunden. Kannst Du mal ein kleines Beispielprogramm posten? Dann kann ich mal etwas "rumspielen"...
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/
GwenDragon
 2008-01-25 14:06
#105152 #105152
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Warte mal noch, tut mir leid.
Ich sehe gerade, dass auf dem Server eine alte Version des HTML-Parser ist.
Ich werde erst mal remote debuggen müssen, damit ich sehe, wo ich das Modul ändern muss.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

GwenDragon
 2008-01-25 19:55
#105174 #105174
User since
2005-01-17
14548 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.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

<< >> 4 Einträge, 1 Seite



View all threads created 2008-01-25 13:02.