simplexml_load_string()
SimpleXML è un'estensione PHP che fornisce un'API semplice per lavorare con documenti XML. La funzione simplexml_load_string() carica XML da una stringa.
Introduzione
SimpleXML è un'estensione PHP che fornisce un'API semplice e intuitiva per lavorare con documenti XML. La funzione simplexml_load_string() è una delle tante funzioni che SimpleXML mette a disposizione per lavorare con documenti XML. È uno strumento potente che può essere utilizzato per caricare un documento XML da una stringa e creare un oggetto SimpleXMLElement. In questo articolo discuteremo in dettaglio la funzione simplexml_load_string() e come può essere utilizzata in PHP.
Comprendere la funzione simplexml_load_string()
La funzione simplexml_load_string() in PHP carica un documento XML da una stringa e crea un oggetto SimpleXMLElement. (Nota: questo è l'approccio procedurale; l'equivalente orientato agli oggetti è new SimpleXMLElement($string).) La sintassi per utilizzare la funzione simplexml_load_string() è la seguente:
Sintassi
simplexml_load_string ( string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] ) : SimpleXMLElementQui, $data è la stringa contenente il documento XML da caricare. $class_name è un parametro opzionale che specifica il nome della classe da utilizzare per l'oggetto SimpleXMLElement. $options è un parametro opzionale che specifica opzioni aggiuntive per il caricamento del documento XML. $ns è un parametro opzionale che specifica il namespace da utilizzare per il documento XML. $is_prefix è un parametro opzionale che specifica se il namespace è un prefisso.
Esempio di utilizzo
Vediamo un esempio per comprendere l'utilizzo della funzione simplexml_load_string() in PHP:
Esempio di utilizzo della funzione simplexml_load_string() in PHP
Nell'esempio precedente, creiamo prima una stringa contenente un documento XML. Utilizziamo poi la funzione simplexml_load_string() per caricare il documento XML dalla stringa e creare un oggetto SimpleXMLElement. Usiamo un ciclo foreach per iterare su ogni elemento book nel documento XML e stampare il titolo di ogni libro.
Se il tuo XML proviene da un file o un URL invece che da una stringa, usa simplexml_load_file().
Lettura degli attributi
Gli attributi XML sono accessibili con la sintassi stile array ($element['attrName']), mentre gli elementi figlio usano la sintassi a proprietà ($element->child). Questo è l'errore più comune per i principianti:
<?php
$xmlString = '<books><book id="1"><title>PHP Basics</title></book></books>';
$xml = simplexml_load_string($xmlString);
foreach ($xml->book as $book) {
echo "ID: " . $book['id'] . " - Title: " . $book->title . "\n";
}Questo stampa ID: 1 - Title: PHP Basics. Nota che i valori degli attributi sono essi stessi oggetti SimpleXMLElement, quindi eseguine il cast con (string) o (int) se hai bisogno di uno scalare semplice.
Utilizzo del parametro options
Il terzo parametro accetta costanti di opzione libxml che modificano il modo in cui il documento viene analizzato. Una molto usata è LIBXML_NOCDATA, che unisce le sezioni CDATA in nodi di testo normale così puoi leggerle come contenuto ordinario:
<?php
$xmlString = '<note><body><![CDATA[Hello <b>world</b>]]></body></note>';
$xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA);
echo (string) $xml->body . "\n";Senza LIBXML_NOCDATA, $xml->body sarebbe vuoto se acceduto come stringa perché il contenuto si trova in un nodo CDATA.
Gestione degli errori
Per impostazione predefinita, simplexml_load_string() emette avvisi se l'XML è malformato. Per gestire gli errori in modo corretto, puoi usare libxml_use_internal_errors():
<?php
$xmlString = '<books><book><title>PHP Basics</title></books>'; // Missing closing </book> tag
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
foreach (libxml_get_errors() as $error) {
echo "Error: ", trim($error->message), "\n";
}
} else {
foreach($xml->book as $book) {
echo $book->title . "\n";
}
}Quando l'XML non è valido, simplexml_load_string() restituisce false anziché lanciare un'eccezione. Chiamare libxml_use_internal_errors(true) sopprime gli avvisi predefiniti e consente di ispezionare gli errori raccolti con libxml_get_errors(). Controlla sempre il valore false prima di utilizzare il risultato.
Conclusione
simplexml_load_string() analizza una stringa XML in un oggetto SimpleXMLElement, fornendo accesso in stile oggetto agli elementi figlio ($xml->child) e accesso in stile array agli attributi ($xml['attr']). Usala quando l'XML è già in memoria; usa simplexml_load_file() quando si trova in un file o URL. Per un codice robusto, abilita gli errori interni di libxml e controlla il valore restituito prima di leggere il risultato. Per approfondire l'API SimpleXML, consulta la panoramica di SimpleXML.