• User Attivo

    @Napster said:

    Per Leggere il documento xml in modalità SAX?

    Prova questo script:

    [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;

    }
    ?>
    [/php]

    Ciao!


  • User Newbie

    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


  • User Attivo

    Ho provato lo script ma non trova la Dom, come si attiva ?

    Sto usando in locale Easyphp.

    Grazie


  • User Attivo

    Ho questo errore :

    Fatal error: Cannot instantiate non-existent class: domdocument in c:\programmi\easyphp1-7\www\xml\leggibet.php on line 6


  • User Attivo

    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..


  • User

    @Sups said:

    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


  • User Attivo

    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!


  • User

    @Sups said:

    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!


  • User Attivo

    Ho creato un semplice script che legge un file XML e crea le query SQL per l'inserimento dei dati nel DB.

    Codice XML

    
    <?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>Italia</residenza>
        </utente>
    </database>
    
    

    Per come è concepito il codice:
    <utente> = Nome della tabella
    <nome>, <cognome>, ecc... = Nome dei campi della tabella
    Andrea, Mario, ecc... = Valori da inserire nella tabella

    Il codice è questo:

    [PHP]
    <?php
    $xml_path = "file.xml";

    $i = 0;
    $query = "";
    
    $dom = new DOMDocument();
    
    $dom -> preserveWhiteSpace = false;
    
    @$dom -> load($xml_path)
        or die("File XML non valido!");
        
    $root = $dom -> documentElement;
    
    if(@$root -> hasChildNodes())
    {
        xmltree($root, 0);
        
        echo $query;
    }
    
    function xmltree($nodo, $p)
    {
        $p++;
        
        $figli = $nodo -> childNodes;
        
        foreach($figli as $figlio)
        {
            if(substr($figlio -> nodeName, 0, 1) != "#")
            {
                // <utente> = Nome della tabella
                if($p == 1)
                {
                    $GLOBALS['query'] .= "<br>INSERT INTO " . $figlio -> nodeName . " SET ";
                    $GLOBALS['i'] = 0;
                }
                else
                {
                    if($GLOBALS['i'] == 1)
                    {
                        $GLOBALS['query'] .= ", " . $figlio -> nodeName . " = '";
                    }
                    else
                    {
                        $GLOBALS['query'] .= $figlio -> nodeName . " = '";
                        $GLOBALS['i'] = 1;
                    }
                }
            }
            
            // Valori dei nodi
            if($figlio -> hasChildNodes())
            {
                xmltree($figlio, $p);
            }
            else
            {
                $GLOBALS['query'] .= $figlio -> nodeValue . "'";
            }
        }
    }
    

    ?>
    [/PHP]

    Ciao!


  • User

    Grazie 1000 Sups!
    Ho fatto delle prove e ora riesco con il tuo script a popolare una tabella in mysql partendo da un file xml.

    non riesco però ad eseguire gli aggiornamenti.
    essendo il file xml un elenco di articoli, devo aggiornarlo spesso per poter per es modificare le quantità disponibili.

    puoi aiutarmi?


  • User Attivo

    @Sark said:

    non riesco però ad eseguire gli aggiornamenti.
    essendo il file xml un elenco di articoli, devo aggiornarlo spesso per poter per es modificare le quantità disponibili.

    Non ti posso rispondere perchè non conosco il tipo di relazione tra XML e l'articolo, cioè com'è strutturato quest'ultimo all'interno del file XML e come deve essere rappresentato nel DB.
    Però potresti sostituire INSERT INTO con UPDATE, la query SQL che permette l'aggiornamento di righe già esistenti.


  • User

    Salve,
    ho trovato lo script su internet, mi serve ma vorrei modificare una cosa... in pratica mi serve che il file xml non sia sul server dove è stato avviato lo script, ma su un altro server, come faccio a richiamarlo???


  • User

    Grazie Sups|
    Script molto utile!!!
    Perfetto anche per il file xml remoto!!!!!