Thread <b>*</b> mit perl aus XML filtern?
(64 answers)
Opened by Hunnenkoenig at 2009-10-27 18:57 2009-10-27T21:06:23 Hunnenkoenig Der Operator // und die Funktion say existieren nicht in Perl 5.8 und müssen durch andere Konstrukte ersetzt oder approximiert werden. Quote Direkt auf der Kommandozeile durch Aufruf des Perlinterpreters. Quote Das solltest Du schon dazu sagen, denn eine CGI-Umgebung ist ein Sonderfall für die Ausführung eines Programmes und zwar keinesfalls der einzige mögliche. Nur um ein paar willkürliche Beispiele zu nennen, wären auch Ausführung als Cronjob, als Plug-In in irgendeinem anderen Programm oder als Handler für inetd möglich. Wenn also nichts anderes erwähnt wurde, nimmt der geneigte Leser mit hoher Wahrscheinlichkeit an, es ginge einfach um die Ausführung des Skriptes an der Kommandozeile. Um das Skript CGI-tauglich zu machen, kann beispielsweise das Modul CGI eingebunden werden. Den Inhalt von $appid entnimmt man dann nicht aus @ARGV, sondern aus den Abfrageparametern der HTTP-Anfrage und vor der Ausgabe von Informationen muss man einen HTTP-Header schreiben. Hier das ganze nochmal komplett für Perl 5.8 und CGI-Kontext: 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 use 5.008; use strict; use warnings; use utf8; use CGI; use LWP::Simple; use XML::LibXML; use constant { URL_TEMPLATE => 'http://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=%s&mt=8', APPLE_ITEMS_NS => 'http://www.apple.com/itms/' }; # Create CGI context, XML parser object and XPath context my $cgi = CGI->new(); my $libxml = XML::LibXML->new(); my $xpath = XML::LibXML::XPathContext->new(); $xpath->registerNs(itms => APPLE_ITEMS_NS); # Get application ID from query parameters or use default my $appid = $cgi->param('appid') || '321234472'; # Format URL using template and application ID, load content and parse XML my $document = $libxml->parse_string(get(sprintf(URL_TEMPLATE, $appid))); # Extract all <b>-tags from the XML data my @bs = $xpath->findnodes('//itms:b', $document); # Print HTTP header and the text contained in the extracted tags print $cgi->header(-type => 'text/plain', -charset => 'utf-8'); print $_->textContent . "\n" foreach (@bs); When C++ is your hammer, every problem looks like your thumb.
|