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.