Start · Sprachen · PHP · Referenz · XMLDiff\Exception

XMLDiff\Exception

Klasse

Ausnahmeklasse der XMLDiff-Erweiterung, die bei Fehlern im XML-Vergleich oder -Zusammenführen geworfen wird.

Kategorie: error

Signatur

class XMLDiff\Exception extends \Exception

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;
}
XMLDiff-Fehler: (Fehlermeldung abhängig von der Eingabe und libdiffx-Version)

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.