Start · Sprachen · PHP · Referenz · Dom\NamespaceInfo

Dom\NamespaceInfo

Klasse

Enthält Informationen über einen XML-Namensraum, wie Präfix und Namespace-URI eines DOM-Elements oder -Attributs.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\NamespaceInfo

Beschreibung

Dom\NamespaceInfo ist eine schreibgeschützte Datenklasse, die Informationen über einen XML-Namensraum kapselt. Sie wird innerhalb der modernen DOM-Erweiterung (verfügbar seit PHP 8.4) verwendet und enthält typischerweise den Namensraum-Präfix sowie die zugehörige Namespace-URI.

Instanzen dieser Klasse werden nicht direkt instanziiert, sondern als Rückgabewert von Methoden wie Dom\Element::getInScopeNamespaces() oder Dom\Element::getDescendantNamespaces() zurückgegeben. Sie ermöglichen eine strukturierte Abfrage der in einem XML-Dokument definierten Namensräume.

Die Klasse ist besonders nützlich beim Parsen und Verarbeiten von XML-Dokumenten, die mehrere Namensräume verwenden – etwa XHTML, SVG, SOAP-Envelopes oder ähnliche Formate, in denen Namensräume eine zentrale Rolle spielen.

Beispiele

Namensräume eines Elements auslesen

<?php
$xml = <<<XML
<?xml version="1.0"?>
<root xmlns="http://example.com/default" xmlns:foo="http://example.com/foo">
    <foo:child />
</root>
XML;

$doc = Dom\XMLDocument::createFromString($xml);
$root = $doc->documentElement;

// Alle im Gültigkeitsbereich befindlichen Namensräume abrufen
$namespaces = $root->getInScopeNamespaces();

foreach ($namespaces as $nsInfo) {
    echo 'Präfix: ' . ($nsInfo->prefix ?? '(leer)') . "\n";
    echo 'URI:    ' . $nsInfo->namespaceURI . "\n";
    echo '---' . "\n";
}
Präfix: (leer) URI: http://example.com/default --- Präfix: foo URI: http://example.com/foo ---

Nachfahren-Namensräume eines Dokuments 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 xsi:nil="true" />
</root>
XML;

$doc = Dom\XMLDocument::createFromString($xml);
$root = $doc->documentElement;

foreach ($root->getDescendantNamespaces() as $nsInfo) {
    /** @var Dom\NamespaceInfo $nsInfo */
    printf("Präfix: %-10s URI: %s\n", $nsInfo->prefix ?? '(default)', $nsInfo->namespaceURI);
}
Präfix: soap URI: http://schemas.xmlsoap.org/soap/envelope/ Präfix: xsi URI: http://www.w3.org/2001/XMLSchema-instance

// Wichtig · Fallstricke

Schreibschutz: Die Eigenschaften von Dom\NamespaceInfo (z. B. prefix und namespaceURI) sind schreibgeschützt und können nicht von außen verändert werden.

Nur PHP 8.4+: Diese Klasse gehört zur neuen Dom\-Erweiterung, die in PHP 8.4 eingeführt wurde und die klassische DOMDocument-API ergänzt bzw. modernisiert. Sie ist nicht rückwärtskompatibel mit der alten DOM-Erweiterung.

Der Präfix kann null sein, wenn es sich um den Standard-Namensraum (ohne Präfix-Bindung) handelt.