Signatur
Beschreibung
XMLDiff\Exception ist die zentrale Fehlerklasse der XMLDiff-PECL-Erweiterung. Sie erweitert die eingebaute PHP-Klasse \Exception und wird geworfen, wenn beim Vergleichen (diff) oder Zusammenführen (merge) von XML-Dokumenten ein Fehler auftritt.
Typische Auslöser sind ungültige oder nicht wohlgeformte XML-Eingaben, fehlende Dokumente oder interne Fehler der zugrunde liegenden libdiffx-Bibliothek. Da XMLDiff\Exception von \Exception erbt, stehen alle üblichen Methoden wie getMessage(), getCode() und getTrace() zur Verfügung.
Beim Einsatz der XMLDiff-Klassen (XMLDiff\Base, XMLDiff\DOM, XMLDiff\Memory, XMLDiff\File) sollte der Code stets in einem try/catch-Block gekapselt werden, der XMLDiff\Exception abfängt, um robuste Fehlerbehandlung zu gewährleisten.
Beispiele
Abfangen einer XMLDiff\Exception beim XML-Vergleich
<?php
try {
$diff = new XMLDiff\Memory();
// Absichtlich ungültiges XML übergeben
$result = $diff->diff('<root><a/></root>', '<root><INVALID</root>');
echo $result;
} catch (XMLDiff\Exception $e) {
echo 'XMLDiff-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
} catch (\Exception $e) {
echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
Gezieltes Abfangen bei Dateioperationen
<?php
$xmlFileA = '/tmp/document_a.xml';
$xmlFileB = '/tmp/document_b.xml';
file_put_contents($xmlFileA, '<root><item id="1">Hallo</item></root>');
file_put_contents($xmlFileB, '<root><item id="1">Welt</item></root>');
try {
$diff = new XMLDiff\File();
$result = $diff->diff($xmlFileA, $xmlFileB);
echo $result;
} catch (XMLDiff\Exception $e) {
// Spezifische XMLDiff-Fehler behandeln
error_log('XML-Diff-Fehler: ' . $e->getMessage());
echo 'Vergleich fehlgeschlagen: ' . htmlspecialchars($e->getMessage());
} finally {
unlink($xmlFileA);
unlink($xmlFileB);
}
// Wichtig · Fallstricke
Erweiterung erforderlich: XMLDiff\Exception ist nur verfügbar, wenn die PECL-Erweiterung xmldiff installiert und in der php.ini aktiviert ist. Ohne diese Erweiterung ist die Klasse nicht definiert.
Da XMLDiff\Exception von \Exception erbt, kann sie auch mit einem allgemeinen catch (\Exception $e)-Block abgefangen werden. Es empfiehlt sich jedoch, zuerst XMLDiff\Exception spezifisch zu behandeln, um zwischen XMLDiff-Fehlern und anderen Ausnahmen zu unterscheiden.
Bei der Verarbeitung von XML aus nicht vertrauenswürdigen Quellen sollte die Eingabe vor der Übergabe an XMLDiff-Methoden validiert und bereinigt werden, da fehlerhafte Dokumente zu Ausnahmen führen können.