Start · Sprachen · PHP · Referenz · XMLDiff\Base

XMLDiff\Base

Klasse

Abstrakte Basisklasse für alle Vergleichsklassen der <code>XMLDiff</code>-Erweiterung.

Kategorie: xml

Signatur

abstract class XMLDiff\Base

Beschreibung

XMLDiff\Base ist die abstrakte Grundlage der PECL-Erweiterung xmldiff. Sie definiert die gemeinsame Schnittstelle und das grundlegende Verhalten für alle konkreten Vergleichsklassen wie XMLDiff\DOM, XMLDiff\Memory und XMLDiff\File. Da sie abstrakt ist, kann sie nicht direkt instanziiert werden.

Die Klasse stellt zwei zentrale Methoden bereit: diff() zum Ermitteln der Unterschiede zwischen zwei XML-Dokumenten und merge() zum Zusammenführen eines Ausgangsdokuments mit einem zuvor erzeugten Diff. Mit diesen Methoden lassen sich XML-Dokumente strukturell vergleichen und Änderungen zwischen Versionen nachverfolgen oder zusammenführen.

Die konkrete Unterklasse bestimmt dabei, wie die XML-Eingaben geliefert werden: als DOM-Objekte (XMLDiff\DOM), als Zeichenketten im Arbeitsspeicher (XMLDiff\Memory) oder als Dateipfade (XMLDiff\File). Für den praktischen Einsatz sollte stets eine dieser konkreten Klassen verwendet werden.

Voraussetzung ist die Installation der PECL-Erweiterung xmldiff sowie die Bibliothek libdiffmark. Die Erweiterung erzeugt Diffs im XML-Format nach dem DeltaXML-Standard.

Beispiele

Unterschiede zwischen zwei XML-Dokumenten im Arbeitsspeicher ermitteln

<?php
// XMLDiff\Memory ist eine konkrete Unterklasse von XMLDiff\Base
$differ = new XMLDiff\Memory();

$xmlA = '<?xml version="1.0"?><root><item>Hallo</item></root>';
$xmlB = '<?xml version="1.0"?><root><item>Welt</item></root>';

// Diff erzeugen
$diff = $differ->diff($xmlA, $xmlB);
echo $diff;

Änderungen zusammenführen (merge) mit XMLDiff\File

<?php
// Voraussetzung: zwei XML-Dateien und ein zuvor erzeugtes Diff
$differ = new XMLDiff\File();

// Diff zwischen zwei Dateien erzeugen
$diff = $differ->diff('/pfad/zur/original.xml', '/pfad/zur/geaendert.xml');

// Diff in Datei speichern
file_put_contents('/pfad/zur/diff.xml', $diff);

// Original-Datei mit dem Diff zusammenführen, um die geänderte Version zu rekonstruieren
$merged = $differ->merge('/pfad/zur/original.xml', '/pfad/zur/diff.xml');
echo $merged;

// Wichtig · Fallstricke

Abstrakte Klasse: XMLDiff\Base kann nicht direkt instanziiert werden. Es muss stets eine der konkreten Unterklassen (XMLDiff\DOM, XMLDiff\Memory, XMLDiff\File) verwendet werden.

Verfügbarkeit: Die Klasse ist nur verfügbar, wenn die PECL-Erweiterung xmldiff installiert und aktiviert ist (extension=xmldiff.so bzw. extension=xmldiff.dll). Zusätzlich muss die Systembibliothek libdiffmark vorhanden sein.

Rückgabewert bei Fehler: Die Methoden diff() und merge() können NULL zurückgeben, wenn die Eingabe ungültig ist oder ein interner Fehler auftritt. Eine Überprüfung des Rückgabewerts ist daher empfehlenswert.