Jonas: XML/RSS parsen - nicht-standard knoten

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

  1. 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.

  2. 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

    --
    Hier könnte Ihre Werbung stehen.
    Räucherofen selber gebaut || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
  3. 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