[Php-it] Elaborare un XML da php4: lentezza e troppe risorse usate

RedFoxy redfoxy at redfoxy.it
Fri Mar 9 16:42:13 CET 2007


Domenico Lorusso ha scritto:
>> Effettivamente usando questa preg per tutti i record (togliendo id 
>> mezzo tutti il resto) mi tirerei fuori tutti i dati con il nome 
>> variabile in [1] e in [2] i valori... pero' ha una pecca questo 
>> sistema, se chi fa' l'xml mi inverte l'ordine delle variabili, mi 
>> sballa la presenza dentro l'array
>>
> assolutamente no,
> o meglio in [1] hai le chiavi in [2] i corrispondenti
> ti basta usare array_combine seguito da ksort per avere sempre lo stesso
> ordine

OK, ma se mi omettono un parametro o me ne mettono uno in piu' come 
faccio a capire dove inizia e dove finisce quel <rec * /> ?


> Ho dato un 'occhiata al tuo codice.... alcune considerazione
> - Mi sembra che non sfrutti a pieno la potenza delle er

come sistemeresti? io ho fatto in quel modo a mo di prendo pezzo (le 
info del xml) e tiro fuori solo la parte rimanente se quel primo pezzo 
e' ok, da quello che rimane prendo il secondo pezzo (dataroot) e lo 
rimuovo cosi' l'ultimo pezzo sono i record

> - Occupati di ottenere prima un array associativo con i dati, poi valida
> in cascata il contenuto, dovrebbe risultare più chiaro e credo
> mediamente più veloce

Teoricamente se interrompo la creazione al primo errore critico dovrei 
risparmiarmi il tempo di elaborare gli altri dati... cmq posso provare 
per vedere

> - [dettaglio] usa l'approccio if error break (da più leggibilità al codice)

Mmmm cioe'? in genere io uso uno schema tipo quello che hai visto 
proprio per non generare interruzioni nel flusso di lettura

> 
> Inoltre in ogni file può esserci un dataroot altrimenti non è xml oppure
> esiste un tag superiore di cui non hai parlato...

UN solo dataroot e N^x di rec

> e nel codice che usi sembri partire da questo approccio.. se questo è
> vero l'array si ottiene con poche operazioni:

Forse potrebbe sembrare ma e' piu' che latro per affettare il dataroot 
ed avere i dati del dataroot in una key dell'array e la risultante del 
con solo i <rec * > in un altra key dell'array

> sia $testo la parte di testo contenente i record
> 
> preg_metch_all('#\<rec\s.*/\>#sUD',$testo,$m);
> 
> $record=$m[0];
> $n=count($record);
> $out=array();
> for ($i=0;$i<$n;$i++){
>    preg_match_all('#(\w+)="(.*)"#sUD',$record[$i],$m);
>    #->io uso $i ma potresti usare una altro campo se hai una chiave
> primaria per esempio
>    #->Ci va anche poco ad inserire qui un controllo per vedere che ci
> siano tutte le chiavi obbligatorie
>    #->Quello sulla correttezza dei valori magari lo farei dopo cmq
>    $out[$i]=array_combine($m[1],$m[2] );
> }
> unset($m,$record);
> 
> 
> Ora fai i controlli su $out, al limite puoi metterli su di un file o
> qualcosa di simile

Lasciando perdere che array_combine e' di php5 e non php4, alla fine chi 
mi dice dove finisce un rec ed inizia un altro? usare la conta x4 (i 4 
valori del rec) non e' detto che sia valido in quanto non ci vuole 
niente che in un rec mi mettano 3 o 5 valori facendo sballare tutto... o 
sbaglio a pensarla cosi'?


-- 
RedFoxy
A fox around web
Power at fox for a yiffing world!

Un forum per tutte le esigenze: http://www.forum.redfoxy.it


More information about the Php-it mailing list