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