Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Sax recupero a blocco

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451

    Sax recupero a blocco

    ciao, ammettiamo di avere un xml in questo modo:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <utenti>
        <utente>
            <nome>Luca</nome>
            <cognome>Cicci</cognome>
            <indirizzo>Milano</indirizzo>
        </utente>
        <utente>
            <nome>Max</nome>
            <cognome>Rossi</cognome>
            <indirizzo>Roma</indirizzo>
        </utente>
    </utenti>
    io vorrei prendere il blocco <utente> ed eseguire un query su mysql però senza aspettare di arrivare alla fine e lo potrei fare in:

    codice:
    function end_handler($xml, $tag)
    ma non capisco come, provo a fare una cosa del genere:

    codice:
    function start_handler($xml, $tag, $attributes) {
    	GLOBAL $current_tag;
    	$current_tag = $tag;
    per riportare il tag <utente> in function end_handle ma non me lo riporta lo salta direttamente invece tutti gli altri si.

    nn esiste un modo più semplice per prendere un blocco ed eseguire un istruzione e poi andare avanti???

    devo fare questo perchè il file pesa più di 1gb e non lo posso caricare tutto in una variabile per problemi di ram.

    Grazie.

  2. #2
    la classe completa che fa il parsing qual'è, che solo quelle due funzioni non danno molto aiuto...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    ecco cosa ho creato alla fine

    codice:
    <?php
    
    $struct = array();
    
    function startElement($parser, $name, $attrs){
    	global $struct, $current_tag;
    	$tag = array($name=>'', 'attrs'=> $attrs);
    	array_push($struct,$tag);
    	$current_tag = $name;
    }
    
    function data($parser, $data){
    	global $struct, $current_tag;
    	if(trim($data)){
    		$struct[count($struct)-1][$current_tag]=$data;
    	}
    }
    
    function endElement($parser, $name){
    	global $struct, $current_tag;
    	$struct[count($struct)-2][] = $struct[count($struct)-1];
    	array_pop($struct);
    	
    	if ($name == "DATI"){
    		
    		for ($i = 0; $i <= count($struct[0][0][0]); $i++){				
    			if (!empty($struct[0][0][0][$i]['VERSION']))
    				$version = $struct[0][0][0][$i]['VERSION'];
    				
    			if (!empty($struct[0][0][0][$i]['BODY']))
    				$body    = $struct[0][0][0][$i]['BODY'];
    		}
    		
    		$struct = array('');
    	}
    }
    
    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;
    }
    
    $data = parse_file("file.xml");
    
    
    ?>
    certo che lavorare su un file xml è proprio complicato

    devo usare un FOR perchè i dati in un determinato campo possono aumentare ess.:

    codice:
    <?xml version="1.0"  encoding="utf-8"  ?>
     <export>
      <specifics>
       <version></version>
       <body></body>
      </specifics>
    
      <specifics>
       <version></version>
       <label></label>
       <body></body>
      </specifics>
     </export>
    in specifics i campi possono aumentare e quindi non li posso richiamare con lo stesso numero.

    non riesco a ricavare una struttura ad albero come dico io

    codice:
    $struct[export][1][specifics][version]

  4. #4
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    Originariamente inviato da Santino83_02
    provato con http://www.php.net/manual/en/simplex...ples-basic.php ?
    non posso perchè il file pesa più di 1gb.

  6. #6
    Due link interessanti:

    1) http://blog.liip.ch/archive/2004/05/..._with_php.html è una considerazione sulle velocità di lettura di un xml usando vari metodi. A fondo articolo trovi tutti i codici di esempio per ispirarti

    2) http://www.ibm.com/developerworks/xm...hp2/index.html tratta nello specifico il parsing di xml molto grandi (vedi esempi 5/9/10 )

    qui http://stackoverflow.com/questions/6...big-xml-in-php consigliano di lavorare xml pesanti via php cli
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    Grazie per il tuo aiuto, ora gli do un occhiata.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.