Start · Sprachen · PHP · Referenz · XMLDiff\Memory

XMLDiff\Memory

Klasse

Vergleicht zwei XML-Dokumente, die als Strings im Speicher vorliegen, und erzeugt eine strukturelle XML-Differenz.

Kategorie: xml

Signatur

class XMLDiff\Memory extends XMLDiff\Base

Beschreibung

XMLDiff\Memory ist eine Klasse aus der PECL-Erweiterung xmldiff und ermöglicht den Vergleich zweier XML-Dokumente, die als PHP-Strings übergeben werden. Das Ergebnis ist ein XML-Dokument, das die Unterschiede zwischen den beiden Eingaben in einem strukturierten Format beschreibt.

Die Klasse erbt von XMLDiff\Base und bietet damit die Methoden diff() und merge(). Mit diff() werden zwei XML-Strings verglichen und ein Diff-Dokument zurückgegeben; mit merge() kann dieses Diff-Dokument auf das ursprüngliche XML-Dokument angewendet werden, um das zweite Dokument wiederherzustellen.

Diese Klasse eignet sich besonders für Anwendungsfälle, in denen XML-Inhalte bereits im Speicher vorliegen – etwa wenn sie aus einer Datenbank geladen, dynamisch generiert oder über eine API empfangen wurden – ohne dass ein vorheriges Schreiben auf die Festplatte notwendig ist.

Im Gegensatz zur Schwesterklasse XMLDiff\File, die Dateipfade erwartet, arbeitet XMLDiff\Memory ausschließlich mit String-Repräsentationen von XML-Dokumenten, was sie flexibler und in vielen Web-Anwendungen die erste Wahl macht.

Parameter

Name Typ Default Beschreibung
$nsname string Optionaler XML-Namespace-Name, der für die erzeugten Diff-Elemente verwendet wird. Kann leer gelassen werden, um den Standard-Namespace zu verwenden.

Rückgabewert

Typ

Beispiele

Zwei XML-Strings vergleichen und Diff erzeugen

<?php
$from = '<?xml version="1.0"?><root><item>Hallo</item></root>';
$to   = '<?xml version="1.0"?><root><item>Welt</item><extra/></root>';

$diff = new XMLDiff\Memory();
$result = $diff->diff($from, $to);

echo $result;
<?xml version="1.0"?> <xd:doc xmlns:xd="..."> <!-- strukturiertes Diff-XML --> </xd:doc>

Diff erzeugen und Merge anwenden, um zweites Dokument wiederherzustellen

<?php
$from = '<?xml version="1.0"?><config><debug>false</debug></config>';
$to   = '<?xml version="1.0"?><config><debug>true</debug><verbose>yes</verbose></config>';

$memory = new XMLDiff\Memory();

// Differenz ermitteln
$diffXml = $memory->diff($from, $to);

// Ursprüngliches Dokument + Diff => zweites Dokument wiederherstellen
$restored = $memory->merge($from, $diffXml);

echo $restored;
<?xml version="1.0"?> <config><debug>true</debug><verbose>yes</verbose></config>

// Wichtig · Fallstricke

Achtung: Die xmldiff-Erweiterung ist eine PECL-Erweiterung und nicht Bestandteil der PHP-Standardinstallation. Sie muss separat installiert werden (pecl install xmldiff).

Die Klasse erwartet wohlgeformte XML-Strings. Ungültige oder nicht wohlgeformte XML-Eingaben führen zu Fehlern oder unerwarteten Ergebnissen. Es empfiehlt sich, die Eingaben vorab mit libxml-Funktionen zu validieren.

Das erzeugte Diff-Format ist proprietär für die xmldiff-Bibliothek (basierend auf libdiffx) und nicht mit anderen XML-Diff-Formaten wie XDiff oder RFC-basierten Formaten kompatibel.