Jörgs Webnotizen

PHP: Zugriff auf das erste durch DOMXPath::query gefundene Element

Mit der DOMXPath-Klasse in PHP wollte ich auf das erste Element in einem HTML-Dokument zugreifen, das mit der Klasse „foo“ bezeichnet war. Auf meinem lokalen System (PHP 5.6.14) funktionierte das folgendermaßen:


$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DomXPath($doc);
$entries = $xpath->query("//*[contains(@class, 'foo')]");
$foo = $entries[0];

Auf einem Server mit PHP 5.4 warf dieser Code dann aber folgende Fehlermeldung:

Fatal error: Cannot use object of type DOMNodeList as array in /path/to/script.php on line 9

Nach einer kurzen Recherche bin ich auf diesen Request im PHP Bug Tracking System gestoßen:

DOMNodeList should implement ArrayAccess

Tatsächlich scheint es erst seit PHP 5.6.3 möglich, auf eine von DOMXPath::query zurückgegebene DOMNodeList wie auf ein Array zuzugreifen. Man kann diese allerdings in einer foreach-Schleife auslesen. In dieser Form funktioniert der obige Code auch unter älteren PHP-Versionen:


$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DomXPath($doc);
$entries = $xpath->query("//*[contains(@class, 'foo')]");
foreach ($entries as $entry) {
    $foo = $entry;
    break;
}
Tags: PHP