79 XML

Vediamo il supporto php per la gestione di documenti XML. Questo formato si è affermato come standard di formato per lo scambio dati su internet. La sigla sta per linguaggio di Markup estendibile. Si presenta come forma simile all’html, infatti derivano entrambi dal SGML (linguaggio standard di markup generalizzato). A differenza dell’html, nell’XML oltre a tag che descrivono la struttura di una pagina, troviamo anche tag, da noi definiti, che contengono i dati, facilitandone l’estrazione e che restano divisi. Un documento XML è quindi  composto da 3 parti:

  1. XML contenente i dati
  2. DTD (document type definition) che descrive quali sono i tag e come li posso usare, cioè la struttura logica dell’XML
  3. XLS (extensible style language) come visualizzo i dati ( la loro presentazione)

Php ha un discreto supporto a seconda della complessità del documento e dello spreco di risorse che possiamo permetterci, secondo il seguente diagramma:

Estensioni php per gli xml

A seconda delle nostre esigenze possiamo usare un metodo o l’altro.

Iniziamo col creare un file libri.xml

<?xml version="1.0" encoding="UTF-8" ?>
<biblioteca>
    <libro>
        <isbn>11111111</isbn>
        <autore>Alessandr Manzoni</autore>
        <titolo>I promessi sposi</titolo>
    </libro>
    <libro>
        <isbn>222222222</isbn>
        <autore>Isaac Asimov</autore>
        <titolo>Cronache della galassia</titolo>
    </libro>
    <libro>
        <isbn>3333333333</isbn>
        <autore>Isaac Asimov</autore>
        <titolo>L'altra faccia della spirale</titolo>
    </libro>
</biblioteca>

La prima intestazione è obbligatoria (<?xml version=”1.0″), la seconda (l’encoding) è opzionale. Attenzione a non lasciare spazi prima del tag di apertura iniziale, altrimenti darebbe errore. La struttura è composta da un tag che contiene gli altri (biblioteca). Uno secondario (libro) che ne contiene altri, e così via.

Vediamo il comando php simplexml_load_file che carica l’xml:

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

di seguito un estrazione dei dati del tag libro

foreach ($documento->libro as $libro)
    echo "Autore $libro->isbn $libro->autore $libro->titolo <br />";

Ad ogni libro estratto dal documento di cui ho fatto il parse in $documento che chiamo $libro, accedo ai vari tag interni (isbn, autore, titolo).