Analizzatore Expat XML PHP

Il parser integrato Expat rende possibile gestire documenti XML in PHP.

L'XML viene utilizzato per descrivere dati, con un focus su ciò che sono i dati. Il file XML descrive la struttura dei dati.

Cos'è XML?

In XML, non ci sono tag predefiniti. Devi definire i tuoi tag.

Se desideri imparare di più su XML, visita il nostro Tutorial XML.

Cos'è Expat?

Per leggere e aggiornare - creare e gestire - un documento XML, è necessario un parser XML.

Ci sono due tipi di base di parser XML:

  • Parser basato su albero: questo tipo di parser trasforma il documento XML in una struttura ad albero. Analizza l'intero documento e fornisce un'API per accedere agli elementi dell'albero, come il Document Object Model (DOM).
  • Parser basato su eventi: considera il documento XML come una serie di eventi. Quando si verifica un evento specifico, il parser chiama le funzioni per gestirlo.

Parser basato su eventi

Il parser basato su eventi si concentra sul contenuto del documento XML, non sul loro risultato. Per questo, il parser basato su eventi può accedere ai dati più rapidamente rispetto ai parser basati su albero.

Vediamo il seguente frammento XML:

<from>John</from>

Il parser basato su eventi segnala l'XML sopra come una serie di tre eventi:

  • Inizio elemento: from
  • Inizio sezione CDATA, valore: John
  • Elemento di chiusura: from

L'esempio XML sopra contiene un XML ben formato. Tuttavia, questo esempio è XML non valido perché non ha una dichiarazione di tipo di documento (DTD) associata né un DTD incorporato.

Tuttavia, non c'è differenza nell'uso del parser Expat. Expat non verifica la validità e ignora qualsiasi DTD.

Come parser XML basato su eventi e non validante, Expat è veloce e leggero, perfetto per le applicazioni web PHP.

Nota:Il documento XML deve essere ben formato, altrimenti Expat genererà errori.

Installazione

Il parser XML Expat fa parte integrante del core di PHP. Non è necessario installarlo per utilizzare queste funzioni.

File XML

Nel nostro esempio utilizzeremo il seguente file XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Promemoria</heading>
<body>Non dimenticare l'incontro!</body>
</note>

Inizializzare il parser XML

Dobbiamo inizializzare il parser XML in PHP, definire gestori per diversi eventi XML e poi analizzare questo file XML.

Esempio

<?php
//Inizializzare il parser XML
$parser=xml_parser_create();
//Funzione da utilizzare all'inizio di un elemento
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br />";
    break; 
    case "TO":
    echo "A: ";
    break; 
    case "FROM":
    echo "Da: ";
    break; 
    case "HEADING":
    echo "Intestazione: ";
    break; 
    case "BODY":
    echo "Messaggio: ";
    }
  }
//Funzione da utilizzare alla fine di un elemento
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Funzione da utilizzare quando si trovano dati di carattere
function char($parser,$data)
  {
  echo $data;
  }
//Specificare gestore elemento
xml_set_element_handler($parser,"start","stop");
//Specificare gestore dati
xml_set_character_data_handler($parser,"char");
//Apertura file XML
$fp=fopen("test.xml","r");
//Lettura dati
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) or 
  die (sprintf("Errore XML: %s alla riga %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
//Libera il parser XML
xml_parser_free($parser);
?>

Output del codice sopra:

-- Note --
A: George
Da: John
Intestazione: Promemoria
Messaggio: Non dimenticare l'incontro!

Spiegazione del meccanismo di funzionamento:

  • Inizializzare il parser XML utilizzando la funzione xml_parser_create()
  • Creare funzioni che lavorano con diversi programmi di gestione degli eventi
  • Aggiungere la funzione xml_set_element_handler() per definire quale funzione eseguire quando il parser incontra tag di inizio e fine
  • Aggiungere la funzione xml_set_character_data_handler() per definire quale funzione eseguire quando il parser incontra dati di carattere
  • Analizzare il file "test.xml" utilizzando la funzione xml_parse()
  • In caso di errori, aggiungere la funzione xml_error_string() per convertire gli errori XML in descrizioni testuali
  • Chiamare la funzione xml_parser_free() per liberare la memoria assegnata alla funzione xml_parser_create()

Ulteriori informazioni sul parser PHP Expat

Per ulteriori informazioni sulla funzione PHP Expat, visitare il nostro manuale di riferimento PHP XML Parser.