Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    SAX e XML -> leggere da una determinata posizione x n righe

    Salve a tutti.
    Ho un file XML, che leggo con SAX, cosi formato:
    codice:
    <prodotti>
        <prodotto>
            <id>id</id>
            <nome>nome</nome>
            <descrizione>descrizione</descrizione>
        </prodotto>
        <prodotto>
            <id>id</id>
            <nome>nome</nome>
            <descrizione>descrizione</descrizione>
        </prodotto>
        <prodotto>
            <id>id</id>
            <nome>nome</nome>
            <descrizione>descrizione</descrizione>
        </prodotto>
    ........così via dicendo
    </prodotti>
    Il mio problema è che io non voglio leggere tutti gli articoli e non è detto che voglio leggerli dal primo
    quindi mi servirebbe un metodo per leggere ad esempio 10 articoli a partire dall'articolo 1000...
    e così via...
    come posso fare???
    MiServe di Santino Bivacqua
    PHP/Ruby/Node.js Developer
    www.miserve.com

  2. #2
    Aggiungo lo script che uso cosi magari puo' essere utile a qualcuno:
    Codice PHP:
    class Xml {
        var 
    $struct$i$xml_parser;
        
    //Costruttore della classe
        
    function Xml()
        {
            
    $this->xml_parser xml_parser_create();
            
    // Si utilizza il case-folding
            
    xml_parser_set_option($this->xml_parserXML_OPTION_CASE_FOLDINGTRUE);
            
    xml_set_object($this->xml_parser$this);
            
    xml_set_element_handler($this->xml_parser'start_element''end_element');
            
    xml_set_character_data_handler($this->xml_parser'character_data');
            
    $this->struct  = array();
        }
        
    //Metodi pubblici
        //Metodo per caricare file xml
        
    function load($file,$compresses FALSE)
        {
            
    $fopen    $compresses === TRUE 'gzopen' 'fopen';
            
    $fread    $compresses === TRUE 'gzread' 'fread';
            
    $feof     $compresses === TRUE 'gzeof'  'feof';
            if (!(
    $fp $fopen($file'r'))):
                die(
    "Non si riesce ad aprire il documento XML");
            endif;
            while (
    $data $fread($fp4096)) {
                if (!
    xml_parse($this->xml_parser$data$feof($fp))):
                    die(
    sprintf("Errore XML: %s alla linea %d",
                        
    xml_error_string(xml_get_error_code($this->xml_parser)),
                        
    xml_get_current_line_number($this->xml_parser)));
                endif;
            }

            
    xml_parser_free($this->xml_parser);
        }
        
    //Metodo richiamato ad inizio
        
    function start_element($parser$name$attrs)
        {
            
    $tag = array('name' => $name'attrs' => $attrs);
            
    array_push($this->struct,$tag);
        }
        
    //Metodo chiamato per i dati
        
    function character_data($parser$data)
        {
            
    $this->struct[count($this->struct)-1]['data'] = $data;
        }
        
    //Metodo richiamato alla fine
        
    function end_element($parser$name)
        {
            
    $this->struct[count($this->struct)-2]['child'][] = $this->struct[count($this->struct)-1];
            
    array_pop($this->struct);
        }

    e poi richiamo con
    Codice PHP:
            include('_include/class/xml.cls.php');
        
    $parser = new xml();
        
    $parser->load('ProductData.xml.gz',true);
        print 
    '<pre>';
        
    print_r($parser->struct) ; //Contiene tutto il documento xml
        
    print '</pre>'
    MiServe di Santino Bivacqua
    PHP/Ruby/Node.js Developer
    www.miserve.com

  3. #3
    alla funzione xml_parse()
    vanno passati 3 variabili:
    la prima fa riferimento al parser,
    la seconda i dati da parsare
    e la terza indica, se settata a vero, che sono gli ultimi dati da parsare.
    Ora se io ad un certo punto setto questa variabile a vero ed il documento ancora è da completare mi da errore, come posso risolvere questo problema?
    MiServe di Santino Bivacqua
    PHP/Ruby/Node.js Developer
    www.miserve.com

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.