Home| Progetto| Web| Faq| Acronimi | ||||
Argomenti Documenti pubblicabili:1120
Scripts:1282 Documenti non pubblicabili:162 Categorie tematiche:68 .Net |_C# |_Visual basic.net |_Asp.net Active Server Pages C++ Cascade Style Sheet JavaScript Mysql Php Xml Java |_Java 2 Micro Edition |_Java server pages |_Java Servlet Oracle |_PLSQL PostgreSQL Unix
Php...
Info:
The Class Structure
Unix...
Tip:
Eseguire più comandi in una sola linea
PLSQL...
Script:
for i in 1.. strutture di controllo
Php...
Tip:
Ignorare gli errori
Php...
Faq:
What is PHP?
Shell scripting...
Script:
Compact if construct
Basically, a web session can be defined as the timeframe in which a visitor navigates your web site.
Php Funzione mail()
XPath is a language for addressing parts of an XML document.
It is designed to be used by XSLT and XPointer.
Basically, a web session can be defined as the timeframe in which a visitor navigates your web site.
|
Php
Home >Php > Estrazione di dati da un file XML
ObiettivoL'obiettivo di questo tutorial è di accedere e leggere dei dati in formato XML e visualizzarli in una pagina web attraverso Php.Esistono diversi tecniche e strumenti per eseguire il parsing di un file Xml con Php. In questo caso utilizzerò l'oggetto Php xml_parser_create() che permette appunto di creare un parser e restituisce una risorsa che può essere sfruttata da altre funzioni Xml di Php. Di fatto, viene eseguito un parsing e i valori degli elementi vengono caricati in una matrice che poi viene "scorsa" e formattata da un apposita funzione. Di fatto ho utilizzato questo codice per visualizzare in un portale delle informazioni approssimativamente strutturate secondo il RSS. l file xmlnews.zip contiene il codice completo per la pagina xmlnews.php come per il file xmlnews.xml. Il codice è descritto interamente, pertanto coloro che hanno già conoscenza di Php possono seguire l'esempio copiando e incollando il codice all'interno di una pagina php, che ho chiamato appunto xmlnews.php. PrerequisitiPer questo tutorial occorre una buona conoscenza di PHP.E' pertanto necessario disporre di un web server (per esempio Apache) configurato con il motore Zend /Php. Il codice è stato testato con le versioni di PHP 4.2 che con la versione 5. Il file XmlCome si può vedere il file news.xml è diviso in due principali nodi <left> e <right> i quali compongono i vari <item>, dove sono memorizzati elementi come il titolo, la descrizione, il link o l'url di un'immagine:
<?xml version="1.0" encoding="iso-8859-1"?>
<list> <left> <item> <image>java.jpg</image> <title>Jsp</title> <link>http://www.fishscript.com/?a=JSP</link> <description>Java server pages</description> </item> (...) E' compito del codice Php leggere e comporre con l'appropriato html questi valori. Classe e variabiliNella classe News_Parser sono raggrupate le funzioni necessarie per raggiungere l'obiettivo fissato.Subito vengono dichiarate le variabili necessarie.
<?php
// Marco Magnani // ©2005 www.fishscript.com // Use this script as you like it class News_Parser{ var $fp; var $parser; var $folding = true; var $item_counter = 0; var $dati = array(); var $blocco; (....) I nomi dei tag sono in inglese perchè, in una futura implementazione, si intende dare la possibilità ad altri portali di caricare questi dati nei propri siti atraerso protocollo RSS. Caricamento del file XmlPrima di tutto dotiamo la classe News_Parser della funzione setInputFile che permette di caricare il file Xml.
function setInputFile($file){
$fp = fopen($file,"rb");} Parsing del file XmlLa funzione parse si occupa del parsing di ogni riga del file Xml:
function parse(){
while ($data = fread($this->fp,2048)){ fclose($this->fp);} La funzione si occupa di leggere riga per riga il file Xml, se ad esempio, non è ben rappresentato, ovvero non è well formed restituisce un messaggio di errore. Al termine di questo tutorial può essere utile simulare errori nel file xml per comprendere il funzionamento del controllo sugli errori. La funzione principaleLa funzione News_Parser instanzia un oggetto xml_parser attraverso xml_parser_create().
function News_Parser(){
$xmlp = xml_parser_create();} E' pratica frequente trasformare in maiuscolo tutti i nomi dei tag, anche per ridurre errori di parsing dovuti ad una errata denominazione maiuscolo/minuscolo dei tag attraverso la seguente opzione: xml_parser_set_option($xmlp,XML_OPTION_CASE_FOLDING,$this->folding) Mentre xml_set_element_handler definisce le due funzioni (startHandler,endHandler) che vengono lanciate ad inizio (per esempio <description>) e fine(</description>) di ogni tag, che nel paragrafo successivo prenderemo in esame. Infine xml_set_character_data_handler si occupa, come indica il nome, della gestione dei dati. La denominazione delle tre funzioni (startHandler,endHandler,cdataHandler) non è casuale, anche in questo caso è quasi una convenzione denominare così queste funzioni, anche se potrebbero essere chiamate con qualsiasi altro nome di gradimento. Funzioni startHandler e endHandlerCome sopra indicato, le due funzioni vengono rispettivamente attivate ad apertura e chiusura di ogni elemento.Di fatto, xml_set_element_handler passa alla funzione startHandler il parser, il nome dell'elemento ed eventuali attributi, non utilizzati comunque in questo esempio. Per ogni riga che viene presa in esame vengono caricati i metodi dell'oggetto $this. Così si può vedere viene memorizzato se l'elemento appartiene al blocco left o a quello right, oltre al nodo e l'elemento corrente.
function startHandler($parser,$element_name,$element_attribute){
switch($element_name){case 'LEFT': $this->blocco = "left"; Mentre, in questo script, la funzione endHandler incrementando item_counter conta i vari elementi. Di fatto questo contatore rappresenta il nostro indice di un'oggetto/array bidimensionale attraverso il quale verranno indicizzati e memorizzati i valori contenuti nei vari elementi.
function endHandler($parser,$element_name){
$this->current_tag = '';} Funzione di data handlingSi è visto come l'istruzione: xml_set_character_data_handler($xmlp,"cdataHandler"); lanci la funzione cdataHandler il cui compito, come si intuisce, consiste nel caricare i valori ($cdata) in un oggetto bidimensionale, $this->datidefinito da un indice e un blocco.
function cdataHandler($parser,$cdata){
switch ($this->current_node){ case "ITEM":}switch ($this->current_tag){}case "TITLE":} Funzione di formattazione dei dati degli elementi XmlLa classe News_Parser è dotata infine della funzione ComposeXml.La funzione bisogna di 3 parametri, l'oggetto dati, ovvero $NewsP->dati, un parametro che specifica il blocco (sinistra o destro) e l'indice dell'array/oggetto nel quale sono stati memorizzati i dati letti dal file Xml. Se l'elemento <image> o <link> sono valorizzati la funzione incapsula il dato all'interno dell'appropriato codice Html.
function ComposeXml($obj,$block,$i){
if ($obj[$i] [$block]["image"] !="") {return $Fhtml;$immagine = "<img src='".$obj[$i] [$block]["image"]."' alt='$block' align='left' width='40' height='40'>";}$Fhtml=$Fhtml.$obj[$i] [$block] ["title"] ; if ($obj[$i] [$block]["link"] !=""){ } Instanza della classe e visualizzazione dei dati XmlPreparata la classe News_Parser adesso è possibile instanziarne un oggetto, e quindi caricare il file,eseguire il parsing dei dati e visualizzarli nel Browser.
// Creazione oggetto $NewsP derivato da News_Parser()
$NewsP =& new News_Parser(); // Caricamento del file Xml $NewsP->setInputFile("news.xml"); // Lancio funzione parse $NewsP->parse(); Quindi attraverso un semplice ciclo adesso è possibile acquisire i dati, eventualmente formattati in Html, due variabili ($NewsLeft e $NewsRight ).
for ($i=0;$i < $NewsP->item_counter;++$i){
Infine per concludere il codice con un pò di "stile" predispongo
gli elementi dove stampare il contenuto delle 2 variabili:
if (($NewsP->dati[$i] ["left"]["title"]!="") OR ($NewsP->dati[$i] ["left"]["description"]!="")){}
<style>
div.left{ div.right{ background: #eec; div.spacer{</style> E finalmente le due variabili contenenti i dati Xml formatti in html potranno essere stampati: <div class="left"> <h3>LEFT</h3> <?=$NewsLeft;?> </div> <div class="spacer"></div> <div class="right"> <h3>RIGHT</h3> <?=$NewsRight;?> </div> Il risultato finale della pagina xmlnews.php dovrebbe essere simile al seguente: ![]() Warning: include(ads/text468x15.html): failed to open stream: No such file or directory in D:\inetpub\webs\fishscriptcom\documents\view_document.php on line 131 Warning: include(): Failed opening 'ads/text468x15.html' for inclusion (include_path='.;C:\php\pear') in D:\inetpub\webs\fishscriptcom\documents\view_document.php on line 131 Tutorial ![]() ![]() ![]() ![]() ![]() Script ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Comandi ![]() ![]() ![]() ![]() ![]() |
Cerca
Php...
Info:
Classes as functions containers
A good scientist is a person with original ideas.
A good engineer is a person who makes a design that works with as few original ideas as possible. There are no prima donnas in engineering. Freeman Dyson A good scientist is a person with original ideas.
A good engineer is a person who makes a design that works with as few original ideas as possible. There are no prima donnas in engineering. Freeman Dyson
Php...
Info:
Classes as functions containers
Php...
Definizioni:
PHP
Oracle...
Definizioni:
Schema and user
Shell scripting...
Script:
How to get size or other file info in a shell script
fishScript.Com is accessible by Mobile access technology
as mobile phones, Palm and Pocket PC .
Nicoleta e Marco Magnani tutorial, examples, courses, esempi, corsi, esercizi, appunti vari Dottoressa Nicoleta Dragu Formatrice Docente Insegnante Mediatrice Culturale Dott. Marco Magnani Universita La Sapienza Roma Master Computer Science Hunter College New York , Data Base Administrator DBA oracle System architect |