Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24

    Automatizzare lettura file xml

    Ciao ragazzi, per un sistema di importazione di dati da xml a mysql ho la necessità di leggere molti file xml. Nel leggere il singolo file non ho problemi, ma qualcuno sa indicarmi come automatizzare il processo di lettura dei file xml in una data cartella, utilizzando la libreria simplexml?
    I file hano il nome come la seguente struttura xxx_AAAA_MM_DD_nnn.xml.
    Grazie anticipatamente

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    presumo che come automatismo tu intenda che lo script parta in automatico e a seconda dei criteri da te impostati effettui il recupero e il salvataggio dei dati.

    A quanto ne so questo automatismo non è possibile ma ci sono delle vie traverse da intraprendete :

    Sotto Linux : Crontab
    Sotto Windowd : Operazioni Pianificate

    Imposti l'esecuzione dello script es ogni giorno, componi il tuo nome file e il gioco è fatto.
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24
    Grazie fractal, ma la mia domanda forse non è chiara. Mi spiego meglio.
    In una data cartella ci sono n file xml denominati come detto nel mio post iniziale. Lo script dovrebbe vedere i file, ed importare solo quelli non letti. Il mio problema è come devo fare per leggere più file xml e non un singolo file, possibilmente utilizzando la libreria simplexml, facendo la discriminante sul nome file? Spero di essere stato chiaro. Ciao e grazie anticipatamente.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ok, non so come funziona di preciso la libreria ma presumo che istanzi l'oggetto passandoli il percorso + nome file o qualcosa del genere.
    Questo lo potresti inserire in un ciclo che ti raccoglie tutti i file xml contenuti nella tua directory

    Codice PHP:
    <?php

    if ($handle opendir('/path/to/files')) {

        while (
    false !== ($entry readdir($handle))) {
            echo 
    "$entry\n";//il tuo file
            //qui istanzi il tuo oggetto e leggi il tuo file.
            //+la tua logica di discriminazione

        
    }

        
    closedir($handle);
    }
    ?>
    per quanto riguarda la logica di discriminazione basta che ne decidi una...
    ad esempio se i file sono tanti potresti spostali in un subdirectory "read" in modo da avere sempre nella tua directory principali tutti i file da leggere...
    oppure ti mappi in una tabella tutti i nomi file letti però a questo punto si tratta di dover leggere l'intera tabella e valutare volta per volta se il file è gia presente nel tuo array o recordset.
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24
    Grazie Fractals87,
    per la discriminante opto di spostare il file in una cartella "letti".
    Invece potresti farmi, cortesemente, un piccolo esempio concreto per il ciclo da te indicato, ipotizzando file come sopra?
    Grazie anticipatamente

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    in questo modo te ne freghi del nome file...
    $entry contiene esattamente il nome del tuo file...

    Fai delle prove


    <?php
    $dir = /path/to/files;
    if ($handle = opendir($dir)) {

    while (false !== ($entry = readdir($handle))) {
    echo "$entry\n";//il tuo file
    $xml = simplexml_load_file($dir.$entry);

    // fai quello che devi fare con il tuo file
    // alla fine fai

    copy($dir.$entry, $dir."letti/".$entry)
    unlink($dir.$entry);
    }

    closedir($handle);
    }
    ?>
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24
    Fractal per leggere la cartella ho dovuto modificare il codice così:
    codice:
    <?php
    $dir = "Dati/xml/nonletti/";
    
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
            echo "$file \n";
    	}
        closedir($dh);
        }
    }
    ?>
    Unica cosa fastidiosa i segni . e .. che compaiono nell'echo (N.B. server IIS 7).

    Invece, non compare nulla a video, quindi c'è un errore, se modifico il file in questo modo:

    codice:
    <?php
    $dir = "Dati/xml/nonletti/";
    
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
            echo "$file \n";
    		$xml = simplexml_load_file($dir.$file);	
            $RGSostituzione = $xml->attributes()->Sostituzione;
    		echo "[*]Sostituzione: $RGSostituzione";
    		}
          closedir($dh);
        }
    }
    ?>
    Idee?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24
    risolti problemi con . e ..
    resta il problema di come far leggere più file con simplexml...
    help me...

  9. #9
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    resta il problema di come far leggere più file con simplexml...
    Il ciclo while serve proprio a quello a leggere tutti i file considerati da te non letti.

    Codice PHP:
    if(!$xml simplexml_load_file($dir.$file)){
     echo 
    "Errore di apertura file";

    Quando si sta utilizzando una classe è importate capire che tipo di return hai

    http://www.php.net/manual/en/functio...-load-file.php

    Da documentazione dice che se per qualche arcano problema fallisce ti restiuisce false.
    Percui per fare un dovuto controllo e capire cosa non funziona in primo luogo metti il controllo che ti ho indicato.
    (Anche se, se ci fossero stati problemi di load file avresti ricevuto errore nel richiamo del metodo)
    Cmq mettilo non si sa mai

    Da esempi della documentazione mi pare di capire che non utilizzi il metodo nel modo corretto
    $xml->foo[0]->attributes();

    Posta magari un esempio del tuo file xml
    Che mestiere difficile.....essere da soli ancora di più

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    24

    RISOLTO

    Scusate per la tardiva risposta, ma ho risolto il problema... questo era dipeso dalla dimenticanza di ateporre $dir a $file...
    Ciao e grazie...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.