Gestire gli XML malformati con la classe PHP SimpleXML

Come manipolare i dati XML con PHP e gestire eventuali errori dovuti a malformazioni del tracciato che si vuole leggere

SimpleXML è una classe di PHP che permette di manipolare dati XML in modo semplice e conveniente. È possibile accedere ai dati XML come se fossero oggetti e iterare su di essi come se fossero array. La classe offre una vasta gamma di funzioni utile per la gestione dei tracciati, ma non gestisce in automatico eventuali malformazioni.

Questa classe, infatti, nel caso in cui l’XML che stiamo tentando di leggere non rispetti particolari requisiti, come il corretto annidamento di ogni singolo tag, una codifica corretta, oppure tutti i tag vuoti correttamente chiusi, fallisce il parsing e restituisce un errore. Per questo motivo prima della lettura dell’XML dobbiamo eseguire un controllo dello stesso e per farlo possiamo utilizzare la funzione simplexml_load_string().

Sostanzialmente, richiamando la funzione con in input il nostro XML in formato stringa, possiamo ottenere il tracciato nell’oggetto SimpleXMLElement se questo è corretto. In caso negativo, ovvero il tracciato è malformato, restituirà false, ed a quel punto possiamo utilizzare la funzione libxml_get_errors per ottenere l’elenco degli errori riconosciuti dalla validazione.

Possiamo riassumere il tutto in questo blocco di codice

$xml = simplexml_load_string($xml_string);
if ($xml === false) {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        echo "Error: {$error->message}\n";
    }
    libxml_clear_errors();
}

Chiaramente, se la funzione restituisce l’oggetto SimpleXMLElement possiamo procedere con le nostre operazioni.

Controlliamo ciclicamente il funzionamento dei link nei nostri articoli. Se noti dei link che non funzionano segnalacelo tra i commenti. Se hai apprezzato l'articolo considera l'idea di sostenere il blog anche con una piccola donazione. Grazie. Patreon / Ko-fi / Liberapay / Paypal

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *