Thread <b>*</b> mit perl aus XML filtern? (64 answers)
Opened by Hunnenkoenig at 2009-10-27 18:57

murphy
 2009-10-28 00:45
#127380 #127380
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2009-10-27T21:06:23 Hunnenkoenig
[...]
Was kann ich machen, damit es mit 5.8 funzt?

Der Operator // und die Funktion say existieren nicht in Perl 5.8 und müssen durch andere Konstrukte ersetzt oder approximiert werden.

Quote
Zum 2. punkt.... öhm...womit dann?

Direkt auf der Kommandozeile durch Aufruf des Perlinterpreters.

Quote
Ich will das ja auf einer website abrufen und das resultat in eine PHP seite einbinden.

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 CPAN: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.

View full thread <b>*</b> mit perl aus XML filtern?