Corsi on-line

PHP e XML: leggere i valori di tag omonimi

Recentemente ho ricevuto una richiesta di assistenza riguardante la gestione dei file XML attraverso un’applicazione scritta in linguaggio PHP; sostanzialmente il problema in questione può essere riassunto tramite la seguente domanda “Come è possibile leggere il contenuto di un documento XML nel quale i nomi dei tag sono tutti uguali?” La soluzione a tale quesito potrebbe non risultare intuitiva nell’immediato, ma il ricorso ai cicli di iterazione di PHP permetterà di ottenere rapidamente il risultato desiderato.

PHPSi parta quindi dal codice del file XML (chiamiamolo pure file.xml) ricordando che esso dovrà prevedere l’omonimia dei tag utilizzati; un semplice esempio a riguardo potrebbe essere il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<contenitore>
<dato parametro= "A" />
<dato parametro= "B" />
<dato parametro= "C" />
</contenitore>

Come è noto, PHP dispone di più estensioni per il parsing di XML, ma nel caso specifico verrà utilizzata SimpleXML; quest’ultima ci permetterà di caricare il file contenente i metadati e di accedere ad essi:

$xml = simplexml_load_file( "file.xml" ); 
foreach ($xml->xpath("/contenitore/dato") as $parametro) 
{ 
var_dump($parametro); 
}

Il ciclo foreach consentirà quindi di associare all’array $parametro i parametri relativi ai tag omonimi, per cui la stampa a video prodotta dallo script sarà simile alla seguente:

object(SimpleXMLElement)[2] 
public '@attributes' => 
array 
'parametro' => string 'A' (length=1)

object(SimpleXMLElement)[3] 
public '@attributes' => 
array 
'parametro' => string 'B' (length=1)

object(SimpleXMLElement)[4] 
public '@attributes' => 
array 
'parametro' => string 'C' (length=1)

Ora, come tradurre in un output “chiavi/valori” il contenuto dell’array prodotto grazie al ciclo? Attraverso due ulteriori cicli. Per confermare ciò partiremo dal codice definitivo della nostra applicazione:

$xml = simplexml_load_file( "file.xml" );
$result = $xml->xpath("/contenitore/dato");
$nodeCount = count($result);
for ($x = 0; $x <= ($nodeCount - 1); ++$x) {
foreach ( $result[$x]->attributes() as $key => $val ) {
echo "$key: $val\n";
}
}

In pratica la funzione count() verrà utilizzata per contare i parametri da stampare, la cifra così ottenuta (decrementata unitariamente per via del fatto che l’indicizzazione degli array parte da “0”) verrà utilizzata come condizione limite per un ciclo for che, a sua volta, conterrà il foreach con il quale stampare a video le coppie chiavi/valori desiderate.

Post correlati
I più letti del mese
Tematiche