Creazione dinamica di file XML con SimpleXML

L’altro giorno in un articolo nella sezione Javascript vi ho parlato dei vantaggi del formato JSON per il trasferimento dei dati. Non ho cambiato idea, ma l’XML è il formato più utilizzato per lo scambio (e in alcuni casi memorizzazione) dei dati, e lo sarà senz’altro per molto tempo, viste le sue peculiarità. Vorrei quindi presentarvi l’estensione SimpleXML di PHP, che consente di manipolare documenti XML attraverso una loro comoda rappresentazione a oggetti.

L’esempio di utilizzo di questa comoda estensione che vi propongo è simile a quello che ho fatto per JSON, tanto che ero piuttosto indeciso su dove pubblicare entrambi gli articoli, ed ecco il compromesso! Naturalmente, l’uso di SimpleXML non si riduce a quello che vi propongo, ma si presta a innumerevoli altri casi. Qui tutta la documentazione che serve. Nella maggior parte dei casi la troveremo già installata con PHP.
Nell’esempio abbiamo una pagina che legge delle parole memorizzate sul database attraverso AJAX, utilizzando le comode funzioni messe a disposizione da JQuery.

Come al solito, creiamo un database di prova. Il DB “Test” a dire il vero normalmente esiste di default, quindi non ci resta che creare la tabella che ci serve.

1
2
3
4
5
6
7
8
9
10
-- Database: `test`
 
CREATE TABLE IF NOT EXISTS `prova` (
  `ID` INT(11) NOT NULL,
  `campo1` VARCHAR(255) NOT NULL
);
 
INSERT INTO `prova` (`ID`, `campo1`) VALUES
(1, 'hello'),
(2, 'word');

Come seconda cosa, creiamo la pagina che farà da tramite fra la pagina HTML e il Database. La pagina in questione è uno script PHP che legge le parole dal DB e, utilizzando SimpleXML, le restituisce in formato XML.
Se qualcosa non fosse chiaro, vi inviterei ad aprire direttamente col browser la pagina in questione e a vedere il risultato dell’esecuzione.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
  /*****************  xml_data.php *******************************/
 
  header('Content-Type: text/xml');
 
  /* Connessione al database. Sostituisci a HOST, UTENTE e PASSWORD i tuoi dati di accesso a MySQL */
  mysql_connect('HOST', 'UTENTE', 'PASSWORD');
  mysql_select_db('test');
 
  //Lettura dal database
  $query = 'SELECT * FROM prova';
  $res = mysql_query($query);
  //Conteggio elementi
  $count = mysql_num_rows($res);
 
  //Creazione dell'albero XML
  $xml = new SimpleXMLElement('<data></data>');
  //Aggiunta dell'attributo count all'elemento radice
  $xml->addAttribute('count', $count);
  //Scorrimento righe lette dal DB
  while($data = mysql_fetch_assoc($res)){
    //Aggiunta di un elemento word come figlio di data
    $child = $xml->addChild('word', $data['campo1']);
    //Attributo ID per l'elemento word
    $child->addAttribute('ID', $data['ID']);
  }
 
  //Stampa dei dati XML
  echo $xml->asXML();
?>

Come ultima cosa, ecco la pagina HTML che sarà aggiornata tramite AJAX scaricando i dati XML restituiti dalla precedente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!-- index.html -->
<html>
  <head>
    <title>Parole</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  </head>
  <body>
    <p>
       <b>Elenco (<span id="num"></span> in totale):</b>
    </p>
    <ul id="lista_parole"></ul>
    <script type="text/javascript">
      $.ajax({
        url : "xml_data.php",
        dataType : "xml",
        success : function (xml, stat) {
          var data = $(xml).find('data');
          $('#num').html(data.attr('count'));
          data.children('word').each(function(){
            $('<li>' + $(this).text() + ' ' + '(ID: ' + $(this).attr('ID') + ')</li>').appendTo('#lista_parole');
          });
        },
        error : function (richiesta, stato, errori) {
          alert("Si è verificato un errore. Riprova più tardi");
        }
      });
    </script>
  </body>
</html>

L’esempio, come al solito, è volutamente molto semplice, senza alcuna gestione di errori né altro, perché sia ben comprensibile a tutti. Chiedete pure, se ci sono dubbi!

Questo articolo è stato pubblicato in PHP da Alex . Aggiungi il permalink ai segnalibri.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *