Thread Eine Art Regex-Engine für HTML - gibt es das schon?
(4 answers)
Opened by flowdy at 2012-08-11 23:02
Damit ich es richtig verstehe. Ich habe HTML da kopiere ich mir die Interessanten teile heraus, markiere die Stellen, die mich interessieren, und der Rest macht das Modul?
Wenn dem so ist, dann ist es durchaus interessant. Ich nutze schon seit längerem ein Programm was die InternetSeiten von Fernsehsender parst und daraus meine Fernsehzeitschrift generiert. Das möchte ich noch nicht veröffentlichen, da unter anderem das Parsen der Seiten nicht sonderlich Komfortabel gelöst ist (HTML::TreeBuilder). Bei Template::Extract und Text::Scraper müssen die Datenstrukturen nach bearbeitet werden. Das ist für einen Editierenden, der nicht gut Programmieren kann nicht einfach. HTML::TreeBuilder ist da vergleichbar. Richtig Kompliziert wird es wenn viele Templates und Seiten bearbeitet werden sollen. Da gibt es nichts. Idealer weise sollte man in den Templates gesuchten Stellen benennen können. Weiterhin wäre eine Signal-Struktur von Vorteil. Damit kann der Programmierer die Datenstruktur selbst bestimmen und zusammen mit den benannten Such-Stellen die Struktur erstellen, die er braucht. Mal so aus der Hüfte geschossen, wie ich mir ein Interface vorstellen würde. 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 use Template_Engine; use LWP::Simple; my $template=Template_Engine->new(); $template->add_template( Parse_Datum => eval{local $/=undef; <DATA>} ); $template->signal_connect('Datum' => &datum, 'optionale Werte an die Funktion'); $template->parse( Parse_Datum => get('http://example.org') ); sub datum { my $wert=shift; my @path=@{shift}; my $opts=shift; print "@path => $wert\n"; return 1; } __DATA__ [%foreach%] <div id="tag"> [%...%] [%foreach%] [%...%] <div class="datum">[%value path='/Tag/Datum'%]</div> [%...%] [%endfor%] [%...%] </div> [%endfor%] Mit einer Ausgabe wie: Code: (dl
)
1 Parse_Datum Tag Datum -> 19.2.2010 Oder mit so einem Template: Code: (dl
)
1 [%foreach path="/Tage"%] Code: (dl
)
1 Parse_Datum Tage Datum -> 19.2.2010 Und wenn für "Name" auch eine Funktion definiert wurde: Code: (dl
)
1 Parse_Datum Tage Name -> Dienstag Schön wäre wenn man alle Tags so behandeln könnte. So was gibt es nicht, soweit ich weiß. Das wäre auch für andere Interessant. |