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

murphy
 2009-10-27 21:18
#127374 #127374
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
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.

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