Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql > Scripting e Risorse utili
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 09-11-07, 19:16   #1 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
[Pillola] Leggere il contenuto di un file XML

Se avete problemi a ricavare informazioni da un file XML, ecco a voi un semplice script PHP che, attraverso l'utilizzo della classe DOM, è in grado di eseguire un parsing del file XML.
Lo script legge il file e ne crea un albero dalla quale è possibile estrapolare i nomi di un nodo, il valore associato e, se ci sono, gli attributi in esso specificati.

Ecco il codice PHP contenente la funzione per il parsing del file XML.
Questo è un codice proposto da Gorka (Moderatore di questo Forum), con l'aggiunta di una spiegazione del funzionameto ed di un controllo per impedire errori nell'apertura di un file XML non valido.
Codice PHP:
<?php
    
//Path file XML
    
$xml_path "file.xml";

    
//Inizializza classe DOM
    
$dom = new DOMDocument();
    
    
//Non calcolare spazi vuoti nel documento
    
$dom -> preserveWhiteSpace false;
    
    
//Carica il file XML
    
@$dom -> load($xml_path)
        or die(
"File XML non valido!");

    
//Cerca il nodo radice del codice XML
    
$root $dom -> documentElement;
    
    
//Controllo se il nodo radice ha figli, in caso processo l'albero XML
    
if($root -> hasChildNodes())
    {
        
//Funzione per l'elaborazione dell'albero XML (Nodo ROOT, Livello 0)
        
xmltree($root0);
    }
    
    
//Funzione xmltree, come argomenti prevede il puntatore al nodo da esaminare ed il livello del nodo
    
function xmltree($nodo$p)
    {
        
//Aumento livello, scendi di un nodo nell'albero
        
$p++;

        
//Visualizzazione grafica opzionale dei livelli ( - = 1° livello, -- = 2° livello, ecc...)
        
$livello str_repeat("  _  "$p);

        
//Ricava figli del nodo elaborato
        
$figli $nodo -> childNodes;

        
//Processa ogni figlio del nodo
        
foreach($figli as $figlio)
        {
            
//Riconosce il primo livello del nodo e traccia una linea grafica di demarcazione (Opzionale)
            
if($p == 1) echo "<hr>";

            
//Visualizza il nome del nodo e rimuovi possibili codici superflui
            
if(substr($figlio -> nodeName01) != "#")
            {
                echo 
"<br><br>" $livello " NODO: " $figlio -> nodeName;
            }

            
//Controlla se il nodo ha degli attributi
            
if($figlio -> hasAttributes())
            {
                
//Cerca attributi nel nodo
                
$attributi $figlio -> attributes;

                
//Elabora attributi trovati
                
foreach($attributi as $attributo)
                {
                    echo 
" -- NOME ATTRIBUTO: " $attributo -> name " - VALORE ATTRIBUTO: " $attributo -> value;
                }
            }

            
            
//Controllo se il nodo elaborato ha figli e ripete iterativamente la funzione su ogni nodo fino ad arrivare alle foglie dell'albero
            
if($figlio -> hasChildNodes())
            {
                
xmltree($figlio$p);
            }
            else
            {
                
//Visualizza il valore contenuto nel nodo
                
echo " -- VALORE DEL NODO: " $figlio -> nodeValue;
            }
        }
    }
?>
Un possible codice contenuto nel file XML

Codice HTML:
<?xml version="1.0"?>
<database>
    <utente>
        <nome>Andrea</nome>
        <user>Sups</user>
        <anno_nascita>1985</anno_nascita>
    </utente>
    <utente>
        <nome>Mario</nome>
        <cognome>De Rossi</cognome>
        <residenza via="Acaso, 15" citta="Pesaro">Italia</residenza>
    </utente>
</database>
Non è molto complessa come funzione
A qualcuno può tornare utile una cosa del genere

P.S: Nel codice XML, ogni riferimento a fatti o persone esistenti è puramente casuale!

Ciao!
__________________
Now is the time for all good men to come to the aid of their country!

Ultima modifica di Sups : 09-11-07 19:25.
Sups non in linea   Rispondi citando
Vecchio 10-11-07, 15:34   #2 (permalink)
Moderatore
 
L'avatar di ceccus
 
Data di registrazione: Oct 2006
Messaggi: 913
Ciao Sups,
grazie della Pillola, sicuramente molto utile!

Aspettiamo qualche feedback dai primi che la implementeranno nei loro script!
__________________

ceccus non in linea   Rispondi citando
Vecchio 12-11-07, 01:26   #3 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
Ciao ceccus, speriam di ricevere feedback positivi

Ci son tre motivi se non arriva niente:
1) A nessuno interessa lo script (Probabile)
2) Nessuno ha ancora provato lo script (Probabile)
3) Il PC è imploso dopo il primo test dello script (Forse )


Ciao!
__________________
Now is the time for all good men to come to the aid of their country!
Sups non in linea   Rispondi citando
Vecchio 12-11-07, 11:30   #4 (permalink)
User
 
L'avatar di Bazzilla
 
Data di registrazione: Jul 2007
Messaggi: 45
Non ho ancora esigenze di lettura file xml, ma non appena ne avrò mi getterò a capofitto su questo script, quindi ringrazio anticipatamente.
Bazzilla non in linea   Rispondi citando
Vecchio 12-11-07, 13:15   #5 (permalink)
Esperto
 
L'avatar di Gorka
 
Data di registrazione: Apr 2006
Ubicazione: Ragusa
Messaggi: 1,676
Invia un messaggio tramite MSN a Gorka Invia un messaggio tramite Skype a Gorka
Testato e funziona bene (bel lavoro Sups ).

Lancio un sasso nello stagno (ho poco tempo a disposizione): verificare se il nodo è codificato a 64bit e decodificarlo con base64_decode(nodo)
Gorka non in linea   Rispondi citando
Vecchio 12-11-07, 15:47   #6 (permalink)
Banned
 
L'avatar di Napster
 
Data di registrazione: Nov 2006
Ubicazione: Roma!
Messaggi: 731
Invia un messaggio tramite MSN a Napster
Per Leggere il documento xml in modalità SAX?

PS: Per scrivere su un file xml?
Napster non in linea   Rispondi citando
Vecchio 12-11-07, 18:02   #7 (permalink)
User
 
Data di registrazione: Nov 2007
Messaggi: 35
Questa cosa capita proprio a fagiolo!!!

Stavo cercando proprio oggi di realizzare un progetto in cui avevo bisogno dell'XML,ma il mio primo problema è questo:

Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in

la riga a cui si riferisce è : $dom = new DOMDocument();

Perchè?

P.S. Ho già abilitato l'estenzione necessaria!
djalessio non in linea   Rispondi citando
Vecchio 13-11-07, 00:37   #8 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
Quote:
Napster Visualizza il messaggio
Per Leggere il documento xml in modalità SAX?
Prova questo script:

Codice PHP:
<?php

# Esempio d'uso:
#
# include ("parserXML.php");
# $data = parse_file("example.xml");
# echo "<pre>"; print_r($data); echo "</pre>";

$struct = array();

# Funzioni di callback

function startElement($parser$name$attrs)
{
global 
$struct;
$tag = array("name"=>$name,"attrs"=>$attrs);
array_push($struct,$tag);
}

function 
data($parser$data)
{
global 
$struct,$i;
if(
trim($data))
{
$struct[count($struct)-1]['data']=$data;
}
}

function 
endElement($parser$name)
{
global 
$struct;
$struct[count($struct)-2]['child'][] = $struct[count($struct)-1];
array_pop($struct);
}

# Funzione che parsa il file passatogli nell'argomento e restituisce
# una struttura ad albero oggetti-array contenente il documento

function parse_file($file){

global 
$struct;

$xml_parser xml_parser_create();

xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"data");

$parse xml_parse($xml_parser,file_get_contents($file));

if(!
$parse) {
die(
"Errore parsing XML");
xml_parser_free($xml_parser);
}

return 
$struct;

}
?>
Ciao!
__________________
Now is the time for all good men to come to the aid of their country!
Sups non in linea   Rispondi citando
Vecchio 29-11-07, 12:15   #9 (permalink)
User Newbie
 
Data di registrazione: Nov 2007
Messaggi: 3
Post Problemi con script per leggere il file xml con Dom

Ciao a tutti.
ho provato lo script per leggere il file xml con il Dom. Ma mi da il seguemte errore;
Fatal error: Cannot redeclare xmltree() in C:\Program Files\EasyPHP 2.0b1\www\testXml.php on line 74

Come si può capire utilizzo la EasyPhp2.0 che utilizza la versione di Php 5.
Come posso risolvere

Grazie a tutti Ciao
Tigrotti non in linea   Rispondi citando
Vecchio 23-01-08, 12:14   #10 (permalink)
User
 
Data di registrazione: Jul 2005
Messaggi: 181
Ho provato lo script ma non trova la Dom, come si attiva ?

Sto usando in locale Easyphp.

Grazie
__________________
Livescore
Dragone67 non in linea   Rispondi citando
Vecchio 23-01-08, 12:20   #11 (permalink)
User
 
Data di registrazione: Jul 2005
Messaggi: 181
Ho questo errore :

Quote:
Fatal error: Cannot instantiate non-existent class: domdocument in c:\programmi\easyphp1-7\www\xml\leggibet.php on line 6
__________________
Livescore
Dragone67 non in linea   Rispondi citando
Vecchio 23-01-08, 14:11   #12 (permalink)
MZ
Moderatore
 
L'avatar di MZ
 
Data di registrazione: Jun 2005
Ubicazione: Lecce-Torino
Messaggi: 509
Ciao Dragone67,

E' un pò di tempo che non uso easyphp, ma penso che per attivare le estensione DOM basta seguire il modello generale:

Mi sembra di aver capito che sei su win:

tratto da http://it2.php.net/domxml

""Gli utenti Windows devono abilitare php_domxml.dll dal php.ini per potere utilizzare queste funzioni. In PHP 4 this DLL resides in the extensions/ directory within the PHP Windows binaries download. La DLL per questa estensione PECL può essere scaricata dalla pagina » PHP Downloads oppure da » http://pecl4win.php.net/ Inoltre, per potere utilizzare queste funzioni, occorre che una DLL aggiuntiva sia presente nella PATH del sistema. In PHP 4 questa DLL si trova nella directory dlls/. Il suo nome: Per PHP <= 4.2.0, è libxml2.dll. Per PHP >= 4.3.0, è iconv.dll. E dal PHP 5.0.0 iconv è compilata nell'eseguibile PHP per Windows, percui non vi è più bisogno di dll aggiuntive.
""

dovrebbe esserti utile..

se poi c'è qualcuno che ha avuto esperienze dirette con easyphp aspettiamo..
__________________
MZ non in linea   Rispondi citando
Vecchio 25-06-08, 17:07   #13 (permalink)
User
 
Data di registrazione: Nov 2007
Ubicazione: web/htdocs
Messaggi: 35
Quote:
Sups Visualizza il messaggio
Se avete problemi a ricavare informazioni da un file XML, ecco a voi un semplice script PHP che, attraverso l'utilizzo della classe DOM, è in grado di eseguire un parsing del file XML.
Ciao Sups, ho provato il tuo script e funziona perfettamente. Il mio obbiettivo finale è quello di importare tutte queste informazioni dal file XML ad una tabella mysql in quanto ho un file XML generato da un programma con all'interno un elenco articoli. Questo elenco vorrei caricarlo su mysql per gestirlo con php e query.
Puoi darmi qualche consiglio?
ciao
Sark non in linea   Rispondi citando
Vecchio 25-06-08, 17:19   #14 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
Ciao Sark, puoi utilizzare il parser xml per leggere tutti i nodi del file XML e salvi il contenuto in una tabella realizzata con l'uso di un array multidimensionale.
Successivamente leggi il contenuto della tabella e invii i dati al DB con apposite query.
Oppure per limitare la complessità, appena letto il valore del nodo, lo invii direttamente al DB.

Ciao!
__________________
Now is the time for all good men to come to the aid of their country!
Sups non in linea   Rispondi citando
Vecchio 25-06-08, 17:23   #15 (permalink)
User
 
Data di registrazione: Nov 2007
Ubicazione: web/htdocs
Messaggi: 35
Quote:
Sups Visualizza il messaggio
Ciao Sark, puoi utilizzare il parser xml per leggere tutti i nodi del file XML e salvi il contenuto in una tabella realizzata con l'uso di un array multidimensionale.
ok direi che è fuori dalla mia portata! hai a disposizione del codice da farmi vedere o un qualche link a siti che possa studiare che trattano gli array multidimensionali?
a livello di concetto ho capito quello che mi hai detto di fare ma non lo so scrivere in php perchè non sono esperto.
ciao!
Sark non in linea   Rispondi citando
Rispondi
Tags: , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 20:20.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.