DOM und Namespaces

Notiz an mich selbst…

Derzeit arbeite ich hauptsächlich mit der DOM-Implementierung von PHP. Nun habe ich erstmals auch externe XML-Dateien eingelesen und verarbeitet (das gibt einen kleinen RSS-Reader).

Dabei entstand ein Problem, das ich zunächst einmal lange nicht nachvollziehen konnte:

<?php
$doc = DOMDocument::loadXML($str);
$x = new DOMXPath($doc);
$channel = $x->query('channel', $doc->documentElement);
echo $channel->length;
?>

Ergab immer 0. Dabei existierte der Node. Nach einigen Versuchen entdeckte ich, dass der Rootnode ein Namespace definiert hatte.


Ahhhh… ok.

<?php
$x->registerNamespace('default', $doc->documentElement->namespaceURI);
$channel = $x->query('default:channel', $doc->documentElement);
?>

1. Ahhh, gut.