Start · Sprachen · PHP · Referenz · Dom\import_simplexml

Dom\import_simplexml

Funktion

Konvertiert ein <code>SimpleXMLElement</code> in ein <code>Dom\Attr</code>- oder <code>Dom\Element</code>-Objekt der modernen DOM-Erweiterung.

seit PHP 8.4.0 Kategorie: xml

Signatur

Dom\import_simplexml(SimpleXMLElement $node): Dom\Attr|Dom\Element

Beschreibung

Dom\import_simplexml ermöglicht den Wechsel zwischen der SimpleXML- und der modernen DOM-API (Namespace Dom\, eingeführt in PHP 8.4). Die Funktion gibt das zugehörige DOM-Knotenobjekt zurück, das intern denselben XML-Knoten repräsentiert – es wird also kein neues Dokument erzeugt, sondern der vorhandene Knoten lediglich unter einem anderen Interface zugänglich gemacht.

Dies ist nützlich, wenn man mit SimpleXML ein XML-Dokument geparst hat und anschließend Operationen benötigt, die nur über die DOM-API verfügbar sind – etwa präzise Namespace-Manipulation, XPath mit erweiterten Optionen oder das Einfügen von CDATA-Sektionen. Umgekehrt können Änderungen, die über das zurückgegebene DOM-Objekt vorgenommen werden, auch im ursprünglichen SimpleXML-Objekt sichtbar sein, da beide auf denselben internen Knoten zeigen.

Je nach Art des übergebenen SimpleXMLElement (Attribut oder Element) wird entweder ein Dom\Attr- oder ein Dom\Element-Objekt zurückgegeben. Die Funktion wirft eine ValueError-Ausnahme, falls der Knotentyp nicht unterstützt wird.

Hinweis: Diese Funktion ist das moderne Gegenstück zur älteren dom_import_simplexml-Funktion und arbeitet mit der neuen Dom\-Klassenhierarchie statt mit den klassischen DOM*-Klassen.

Parameter

Name Typ Default Beschreibung
$node Pflicht SimpleXMLElement Das SimpleXMLElement-Objekt (Element oder Attribut), das in einen DOM-Knoten umgewandelt werden soll.

Rückgabewert

Typ
Dom\Attr|Dom\Element
Beschreibung
Gibt ein Dom\Element-Objekt zurück, wenn das übergebene SimpleXMLElement ein XML-Element repräsentiert, oder ein Dom\Attr-Objekt, wenn es ein Attribut repräsentiert. Beide Objekte teilen sich intern denselben XML-Knoten mit dem Quell-SimpleXMLElement.

Beispiele

Element-Zugriff über DOM nach SimpleXML-Parsing

<?php
$xml = simplexml_load_string('<root><child lang="de">Hallo Welt</child></root>');

// SimpleXMLElement in Dom\Element umwandeln
$domElement = Dom\import_simplexml($xml->child);

echo get_class($domElement) . "\n";      // Dom\Element
echo $domElement->tagName . "\n";        // child
echo $domElement->textContent . "\n";    // Hallo Welt
echo $domElement->getAttribute('lang');  // de
Dom\Element child Hallo Welt de

Änderungen über DOM sind in SimpleXML sichtbar

<?php
$xml = simplexml_load_string('<book><title>PHP lernen</title></book>');

$domTitle = Dom\import_simplexml($xml->title);

// Textinhalt über DOM ändern
$domTitle->textContent = 'PHP meistern';

// Änderung ist auch im SimpleXML-Objekt sichtbar
echo (string) $xml->title; // PHP meistern
PHP meistern

Attribut als Dom\Attr importieren

<?php
$xml = simplexml_load_string('<item status="aktiv" />');

// Attribut als SimpleXMLElement holen
$attr = $xml->attributes()->status;

$domAttr = Dom\import_simplexml($attr);

echo get_class($domAttr) . "\n"; // Dom\Attr
echo $domAttr->name . "\n";      // status
echo $domAttr->value . "\n";     // aktiv
Dom\Attr status aktiv

// Wichtig · Fallstricke

PHP-Version: Diese Funktion ist Teil der neuen Dom\-Erweiterung und steht erst ab PHP 8.4 zur Verfügung. Für ältere PHP-Versionen muss die klassische Funktion dom_import_simplexml verwendet werden, die DOMAttr- bzw. DOMElement-Objekte zurückgibt.

Gemeinsamer Knoten: Da beide Objekte denselben internen C-Knoten teilen, können unerwartete Seiteneffekte auftreten, wenn sowohl das SimpleXML-Objekt als auch das DOM-Objekt gleichzeitig aktiv modifiziert werden.

Fehlerfall: Wird ein nicht unterstützter Knotentyp übergeben (z. B. ein verarbeiteter SimpleXML-Namespace-Kontextknoten), wirft die Funktion eine ValueError-Ausnahme.