Leggere XML con SimpleXml

SimpleXml è una libreria inclusa di default in PHP5 che rende molto più semplice e veloce, il modo per accedere a file XML  rispetto all’uso delle librerie DOM e SAX in PHP4.

Conoscendo la struttura del documento XML, utilizzando SimpleXml possiamo ottenere in modo semplice; l’attributo, il nome ed il contenuto di un elemento.

Facciamo un ‘ esempio per capire subito la semplicità d’uso di questa libreria.

Abbiamo un file XML del tipo:

<?xml version='1.0' ?>
<libri>
<libro id="1">
<titolo>La Divina Commedia</titolo>
<autore>Dante Alighieri</autore>
</libro>
<libro id="2">
<titolo>I Promessi Sposi</titolo>
<autore>Alessandro Manzoni</autore>
</libro>
<libro id="3">
<titolo>I Malavoglia</titolo>
<autore>Giovanni Verga</autore>
</libro>

<libro id="4">
<titolo>La Morsa</titolo>
<autore>Luigi Pirandello</autore>
</libro>
</libri>

Come si può vedere il documento XML rappresenta una lista di libri,
e per ogni libro sono specificati il titolo e l’autore.
Ora creiamo la pagina PHP che ci permette di visualizzare a video titolo ed autore per ogni libro.
Il codice sarà:

<?php
//carico in memoria il file xml
$xml=simplexml_load_file("libri.xml");
//stampo a video titolo e autore per ogni libro
foreach($xml->libro as $libro)
{
echo "Libro id= ".$libro['id']." - Titolo: ".$libro->titolo." - Autore:".$libro->autore."<br />";
}
?>

Esempio di Simplexml con Xpath

Utilizzando il metodo Xpath  possiamo fare ricerche all’interno del documento Xml sotto forma di query tipiche del linguaggio XPath che è uno standard del W3C.




Facciamo un esempio volendo accedere al libro con id=2:

<?php
$xml=simplexml_load_file("libri.xml");

$arr = $xml->xpath("/libri/libro[@id=2]");
//array che contiene le informazioni relative al libro con id=2
print_r($arr);
?>

Oppure vogliamo visualizzare tutti gli autori, la query xpath sara’:

<?php
$xml=simplexml_load_file("libri.xml");
$arr = $xml->xpath("/libri/autore");

//stampo a video tutti gli autori.
foreach($arr as $item)
{
echo $item[0]."<br />";
}
?>

Consideriamo un altro esempio nel caso invece, vogliamo aggiungere un nuovo elemento.

In questo caso vogliamo aggiungere un altro libro e il suo autore.

Il codice sarà:

//carico in memoria il file xml

$xml = simplexml_load_file("libri.xml");

//aggiungo un nuovo libro

$libri = $xml->addChild('libro');

//che avra id con valore 5

$libri->addAttribute('id', '5');

//e quindi titolo e autore del libro

$titolo = $libri->addChild('titolo', 'Numero Zero');

$data = $libri->addChild('autore', 'Umberto Eco');

//apro il file in scrittura
$f = fopen("libri.xml", "w");

//e quindi scrivo sul file xml il nuovo contenuto

fwrite($f, $xml->asXML());

//chiudo il file

fclose($f);

?>

Per ulteriori informazioni su SimpleXML, possiamo fare riferimento alla documetazione ufficiale.

Lascia un commento