XML/RSS parsen - nicht-standard knoten
Jonas
- perl
0 迪拉斯0 Siechfred0 Tim Tepaße
Hallo
Also, ich dreh jetzt dann gleich durch :D
Ich versuche folgenden Feed mittels perl zu parsen: http://gametrailers.com/rss/newestsony.xml
Ich habe dazu folgenden Ansatz:
...
use XML::RSS::Parser;
my $xml = get("http://gametrailers.com/rss/newestsony.xml");
my $p = XML::RSS::Parser->new;
my $feed = $p->parse_string($xml);
foreach my $i ( $feed->query('//item') ) {
my $node = $i->query("title");
print $node->text_content;
}
...
Das klappt auch wunderbar.
Aber es wär kein Problem, wenn es kein ABER gäbe...
Denn der Feed hat innderhalb des item-node noch die Elemente exInfo:movieTitle und exInfo:fileType (welcher wiederum die sub-nodes type sowie link). Diese möchte ich nun auch gerne "auslesen". Der Zugriff über
my $node = $i->query("exInfo:movieTitle");
print $node->text_content;
klappt jedoch nicht:
Can't call method "text_content" on an undefined value
Weiss jemand rat? Ein dankbarer Forumuser wäre demjenigen sicher ;D
Gruss
Jonas
Hey,
du hast nicht den Rückgabewert der Methode query geprüft. Er ist undef. Deshalb kannst du die Methode text_content daran nicht ausführen.
Hell-O!
my $node = $i->query("exInfo:movieTitle");
print $node->text_content;
Laut Dokumentation zu Class::XPath musst du dem Parser mitteilen, wo er die Nodes ausgehend von Root findet. Versuch's also mal mit query('//exInfo:movieTitle').
Siechfred
Hallo Jonas
Denn der Feed hat innderhalb des item-node noch die Elemente exInfo:movieTitle und exInfo:fileType (welcher wiederum die sub-nodes type sowie link). Diese möchte ich nun auch gerne "auslesen". Der Zugriff über
my $node = $i->query("exInfo:movieTitle");
Laut der Dokumentation von XML::RSS::Parser kann er das Präfixe "exInfo" keinem Default-Namensraum zuweisen. D.h. Du musst dem Parser explizit sagen, dass Du mit dem Präfix "exInfo" den Namensraum meinst, der durch die URI "http://www.gametrailers.com/rssexplained.php" qualifiziert wird. Die passenden Methode dafür ist register_ns_prefix(prefix, uri), siehe Dokumentation. Dann kannst Du im XPath-Query auch das Präfix "exInfo" für XPath-Ausdrücke benutzen.
Das Problem ist schon neulich aufgetreten, damals habe ich ausführlicher geantwortet.
Tim