PHP  »  Articoli  »  Programmazione Php 

SimpleXML: gestire XML in PHP 5

di: Gabriele Farina     29 Giugno 2006

Le librerie che possiamo considerare standard che permettono l'accesso in lettura, modifica ed eventualmente interrogazione di file XML sono fondamentalmente DOM e SAX. PHP fornisce un'implementazione di entrambe le librerie, anche se a partire dalla versione 5 espone un sistema molto più semplice e diretto per accedere ai file XML: la libreria SimpleXML abilitata di default all'interno del motore PHP.

La libreria in questione ha il grosso vantaggio di avere un'interfaccia ad oggetti molto semplice ed intuitiva, che, a differenza del più prolisso DOM, richiede pochissime righe di codice per accedere agli elementi interessati e mantiene intatta la struttura del file XML anche nella sua rappresentazione interna (a differenza di SAX che ci obbliga a tener traccia manualmente delle gerarchie durante la gestione degli eventi generati). In aggiunta espone una funzione, che vedremo alla fine dell'articolo, che permette di eseguire query XPath sull'oggetto per recuperare nodi specifici.

Leggere file XML

Il primo esempio che andrò ad illustrare si propone di leggere un file XML e restituire in output il valore di alcuni attributi ed il contenuto di alcuni elementi testuali. Il file XML d'esempio sarà il seguente:

<?xml version="1.0" encoding="utf-8"?>
<articles>
    <article id="1">
        <title>Articolo numero 1</title>
        <author>Gabriele Farina</author>
    </article>
    <article id="2">
        <title>Articolo numero 2</title>
        <author>Gabriele Farina</author>
    </article>
    <article id="3">
        <title>Articolo numero 3</title>
        <author>Francesco Caccavella</author>
    </article>
</articles>

Poniamoci come obiettivo quello di estrarre un elenco di tutti gli articoli:

<?php

$xml = simplexml_load_file('articles.xml');

echo "<h3>Articoli salvati nel file articles.xml (".count($xml->article).")</h3>";
echo "<ul>";
foreach($xml->article as $article)
{
    echo '<li><a href="showarticle.php?id='.$article['id'].'">'.$article->title.'</a> <em>(di '.$article->author.')</em></li>';
}
echo "</ul>";

?>

Eseguendo lo script otteniamo un output corretto estratto con facilità dal file XML. Utilizzando la funzione simplexml_load_file (segnata in rosso nel codice) carichiamo all'interno di un oggetto SimpleXML il contenuto di un file passato come argomento (in verde nel codice). l'argomento può essere sia un file che risiede sulla macchina locale come un file che risiede in remoto su un altro server. L'oggetto restituito rappresenta la root del nostro documento XML: espone una proprietà per ogni nodo figlio che può essere un array (nel caso ci siano più figli omonimi) o un elemento singolo e permette di accedere agli attributi utilizzando la sintassi che normalmente viene utilizzata per accedere ad elementi specifici di un array.

In questo modo l'iterazione è veramente semplice: per ottenere lo stesso risultato usando DOM o SAX avremmo dovuto operare con script più intricati o più lunghi da scrivere. Tutta questa semplicità va a discapito di un po' di funzionalità che, al momento, non sono contemplate all'interno della libreria SimpleXML: i commenti e le processing instructions sono saltate e non vengono salvate durante il parsing del documento. Dato che comunque SimpleXML si propone come una libreria per gestire in modo semplice documenti XML semplici, queste non sono mancanze che attualmente complicano il modo di operare.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti