Signatur
Beschreibung
DOMNameSpaceNode ist eine interne PHP-Klasse, die einen Namensraum-Knoten innerhalb eines DOM-Dokuments repräsentiert. Solche Knoten entstehen, wenn XML-Dokumente mit Namensraum-Präfixen oder Standard-Namensräumen (xmlns) verarbeitet werden. Sie sind typischerweise nicht direkt instanziierbar, sondern werden von XPath-Abfragen zurückgegeben – etwa wenn man mit DOMXPath::query() auf Namensraum-Achsen zugreift.
Die Klasse stellt mehrere schreibgeschützte Eigenschaften bereit, darunter nodeName (das Namensraum-Präfix), nodeValue und namespaceURI (die Namensraum-URI), sowie localName, prefix und parentNode. Diese ermöglichen es, Namensraum-Deklarationen programmatisch auszuwerten, ohne das Dokument manuell zu parsen.
DOMNameSpaceNode implementiert keine Methoden und kann nicht wie ein normaler DOMNode bearbeitet werden – sie dient ausschließlich der Inspektion von Namensraum-Informationen. Typische Anwendungsfälle sind das Auflisten aller im Dokument verwendeten Namensräume oder die Überprüfung von Namensraum-Deklarationen bei der Validierung von XML-Strukturen.
Da die Klasse von der XPath-Namensraum-Achse (namespace::) geliefert wird, ist sie vor allem in Szenarien relevant, in denen komplexe XML-Dokumente mit mehreren Namensräumen (z. B. SOAP, WSDL, SVG) verarbeitet werden.
Beispiele
Alle Namensraum-Knoten eines XML-Dokuments auflesen
<?php
$xml = <<<XML
<?xml version="1.0"?>
<root xmlns="http://example.com/default" xmlns:foo="http://example.com/foo">
<foo:child>Inhalt</foo:child>
</root>
XML;
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
// Namensraum-Achse auf dem Wurzelelement abfragen
$namespaces = $xpath->query('namespace::*', $dom->documentElement);
foreach ($namespaces as $ns) {
// $ns ist ein DOMNameSpaceNode
echo 'Präfix: ' . ($ns->prefix ?: '(Standard)') . PHP_EOL;
echo 'URI: ' . $ns->namespaceURI . PHP_EOL;
echo '---' . PHP_EOL;
}
Namensraum-URI eines bestimmten Präfixes ermitteln
<?php
$xml = <<<XML
<?xml version="1.0"?>
<root xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body/>
</root>
XML;
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$namespaces = $xpath->query('namespace::*', $dom->documentElement);
foreach ($namespaces as $ns) {
/** @var DOMNameSpaceNode $ns */
if ($ns->prefix === 'soap') {
echo 'SOAP-Namensraum-URI: ' . $ns->namespaceURI . PHP_EOL;
}
}
// Wichtig · Fallstricke
Nicht direkt instanziierbar: DOMNameSpaceNode-Objekte können nicht mit new DOMNameSpaceNode() erstellt werden. Sie werden ausschließlich intern von PHP erzeugt und von XPath-Namensraum-Achsenabfragen zurückgegeben.
Kein vollständiger DOMNode: DOMNameSpaceNode erbt nicht von DOMNode und unterstützt daher keine DOM-Manipulationsmethoden wie appendChild() oder cloneNode(). Der Versuch, solche Methoden aufzurufen, führt zu einem Fehler.
Verfügbare Eigenschaften (schreibgeschützt): nodeName, nodeValue, namespaceURI, prefix, localName, ownerDocument, parentNode. Seit PHP 8.0 sind diese offiziell als schreibgeschützt deklariert.
Beachte, dass bei der Namensraum-Achse auch der eingebaute xml-Namensraum (http://www.w3.org/XML/1998/namespace) immer mitgeliefert wird, auch wenn er nicht explizit im Dokument deklariert wurde.