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