Start · Sprachen · PHP · Referenz · DOMNameSpaceNode

DOMNameSpaceNode

Klasse

Repräsentiert einen Namensraum-Knoten in einem DOM-Dokument und stellt Informationen über einen XML-Namensraum bereit.

seit PHP 5.0.0 Kategorie: xml

Signatur

class DOMNameSpaceNode

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;
}
Präfix: (Standard) URI: http://example.com/default --- Präfix: foo URI: http://example.com/foo --- Präfix: xml URI: http://www.w3.org/XML/1998/namespace ---

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;
    }
}
SOAP-Namensraum-URI: http://schemas.xmlsoap.org/soap/envelope/

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