Start · Sprachen · PHP · Referenz · simplexml_import_dom

simplexml_import_dom

Funktion

Konvertiert einen <code>DOMNode</code> (z. B. ein <code>DOMDocument</code> oder <code>DOMElement</code>) in ein <code>SimpleXMLElement</code>-Objekt.

seit PHP 5.0.0 Kategorie: xml

Signatur

simplexml_import_dom(DOMNode $node, string|null $class_name = SimpleXMLElement::class): SimpleXMLElement|false

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

Typ
SimpleXMLElement|false
Beschreibung
Gibt ein 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
1PHP 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
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
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.