Thread <b>*</b> mit perl aus XML filtern?
(64 answers)
Opened by Hunnenkoenig at 2009-10-27 18:57
Bei der Kombination von XPath mit einem Dokument, das XML-Namensräume verwendet, muss man immer ein wenig vorsichtig sein, dass man auch die richtigen Elemente erwischt.
Hier mal ein komplettes lauffähiges Beispiel zum Auslesen und Auseinandernehmen der Daten, um die es geht: 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 use 5.010; use strict; use warnings; 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/' }; # Get application ID from command line or use default my $appid = $ARGV[0] // '321234472'; # Create XML parser object and XPath context my $libxml = XML::LibXML->new(); my $xpath = XML::LibXML::XPathContext->new(); $xpath->registerNs(itms => APPLE_ITEMS_NS); # 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 the text contained in the extracted tags say $_->textContent foreach (@bs); Bessere Fehlerbehandlung und Findung eines exakteren Ausdrucks um nur die gewünschte Information zu extrahieren, sei dem Leser als Übung überlassen ;-) When C++ is your hammer, every problem looks like your thumb.
|