Signatur
Beschreibung
simplexml_import_dom() ermöglicht den Wechsel zwischen der DOM-API und der SimpleXML-API, ohne das XML-Dokument erneut parsen zu müssen. Dabei wird der übergebene DOMNode direkt in ein SimpleXMLElement umgewandelt, das dieselben Daten repräsentiert.
Typische Einsatzgebiete sind Situationen, in denen zunächst komplexe DOM-Manipulationen erforderlich sind (z. B. XPath-Abfragen, das Einfügen von Knoten oder XSLT-Transformationen) und das Ergebnis anschließend bequem über die einfachere SimpleXML-Schnittstelle ausgelesen werden soll.
Über den optionalen Parameter class_name kann eine eigene Klasse angegeben werden, die SimpleXMLElement erweitert. So lassen sich Methoden und Eigenschaften der eigenen Klasse nutzen, während das Dokument aus der DOM-Welt stammt.
Die Funktion arbeitet auf dem bestehenden Dokument und kopiert keine Daten – Änderungen im zurückgegebenen SimpleXMLElement können sich daher auf das ursprüngliche DOM auswirken.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $node Pflicht | DOMNode | Ein gültiger DOMNode, beispielsweise ein DOMDocument oder ein DOMElement, der in ein SimpleXMLElement umgewandelt werden soll. |
|
| $class_name | string|null | SimpleXMLElement::class | Optionaler Name einer Klasse, die SimpleXMLElement erweitert. Das zurückgegebene Objekt ist dann eine Instanz dieser Klasse. |
Rückgabewert
SimpleXMLElement-Objekt (bzw. eine Instanz der in class_name angegebenen Unterklasse) zurück. Im Fehlerfall wird false zurückgegeben, etwa wenn der übergebene Knoten kein gültiges XML-Element repräsentiert.Beispiele
DOMDocument in SimpleXMLElement umwandeln
<?php
$dom = new DOMDocument();
$dom->loadXML('<buecher><buch id="1"><titel>PHP Handbuch</titel></buch></buecher>');
// Einfacher Zugriff über SimpleXML nach DOM-Import
$xml = simplexml_import_dom($dom);
echo $xml->buch['id']; // 1
echo $xml->buch->titel; // PHP Handbuch
Nach XSLT-Transformation mit SimpleXML weiterarbeiten
<?php
// Ursprüngliches Dokument per DOM laden und per XSLT transformieren
$xsl = new DOMDocument();
$xsl->loadXML(<<<'XML'
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ausgabe><wert><xsl:value-of select="//titel"/></wert></ausgabe>
</xsl:template>
</xsl:stylesheet>
XML);
$dom = new DOMDocument();
$dom->loadXML('<daten><titel>PHP Referenz</titel></daten>');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$transformiert = $proc->transformToDoc($dom);
// Transformiertes DOMDocument in SimpleXML importieren
$xml = simplexml_import_dom($transformiert);
echo (string) $xml->wert; // PHP Referenz
Eigene SimpleXMLElement-Unterklasse verwenden
<?php
class MeinXML extends SimpleXMLElement {
public function titelGross(): string {
return strtoupper((string) $this->buch->titel);
}
}
$dom = new DOMDocument();
$dom->loadXML('<buecher><buch><titel>php macht spass</titel></buch></buecher>');
$xml = simplexml_import_dom($dom, MeinXML::class);
echo $xml->titelGross(); // PHP MACHT SPASS
// Wichtig · Fallstricke
Gegenstück: Die umgekehrte Konvertierung – von SimpleXML zurück zu DOM – bietet dom_import_simplexml().
Kein echter Kopiervorgang: Das zurückgegebene SimpleXMLElement teilt intern Daten mit dem ursprünglichen DOMDocument. Wird das DOM-Objekt vorzeitig freigegeben, kann der Zugriff über das SimpleXML-Objekt zu undefiniertem Verhalten führen.
Fehlerbehandlung: Der Rückgabewert sollte immer auf false geprüft werden, bevor das Objekt verwendet wird.