• ModSenior

    Mi piacciono le sfide... 😄 Provo a vedere ... senza impegno... Cosa riesco a fare.. 🙂
    Spero solo di aver capito bene il tutto.
    L'ordine delle colonne nel file CSV resta comunque quello vero?


  • User

    Grazie per la tua disponibilità.

    Il mio vero problema sta nel fatto che il file CSV che acquisisco può cambiare, nel senso che può contenere un diverso numero di colonne, argomenti, ecc...

    Se rimanesse tutto così riuscirei a farlo. Il mio obiettivo era quello di trovare un algoritmo generale che mi permetta di generare il file XML partendo dal CSV, passando come parametri la struttura del file XML.


  • ModSenior

    Allora l'unica cosa che vedo è che per forza di cose, la prima colonna debba essere il primo nodo, la secoda colonna il nodo figlio e cosi via. Ordinati questo si...


  • User

    Allora provo a fare come dici te, ordino in base ai nodi.

    Quindi sarebbe da ordinare le righe secondo l'ordine delle colonne, in modo tale da avere le righe in successione.

    Ovvero ordinare prima per annoScolastico, poi per Classe e infine per matricola


  • ModSenior

    Si quindi iniziare un nuovo nodo nel momento in cui il nodo successivo non cambia.
    Sembra banale ma credo ci si debba lavorare un pò... 😄


  • User

    Mi sei stato molto d'aiuto...
    Domani mattina provo a buttare giù un pò di codice.


  • ModSenior

    Fai informatica?
    L'ho fatta anche io a mio tempo... 😄
    Magari se hai un pò di codice butta anche qua che se qualcuno passa...
    L'unione fa la forza... 🙂
    Ultima notizia... numero di colonne variabili?


  • User

    Si faccio l'ABACUS a Verona...

    Ovviamente dopo posto tutto. Le colonne possono andare da un minimo di 3 ad un massimo di 15.


  • User Attivo

    La soluzione che ti propongo è di leggere il file CSV, creare un array associativo con la struttura che ti serve (ti basta esplodere la riga e usare key/value che ti servono) e poi fare un dump XML del tutto.

    Qui trovi un esempio di come convertire un hash in un documento XML: h t t p ://stackoverflow.com/questions/99350/php-associative-arrays-to-and-from-xml

    HTH, ciao! 🙂


  • User

    Interessante il link che hai postato, provo a vedere come potrei sfruttarlo.

    Questa mattinata ho concluso questo:

    [PHP]
    function csv2xml($lastTag){
    $myXml = "";
    $csv = $this->openCsv();
    //Suddivido tutto le righe
    $rowCsv = explode("\n", $csv);

        //Suddivido ogni singola riga in un sottoarray
        for($j=0; $j<count($rowCsv); $j++){
        	$rowCsv[$j] = explode(";", $rowCsv[$j]);
        }
        
        //Determino la posizione dell'ultimo tag
        $posLastTag = array_search($lastTag, $rowCsv[0]);
        
        //Analizzo ogni singola riga
        $tagInsert = array();
        for($i=1; $i<count($rowCsv); $i++){
        	//echo "RIGA: $i";
        	for($j=0; $j<count($rowCsv*); $j++){
        		if($j <= $posLastTag and in_array($rowCsv*[$j], $tagInsert) === false){
        			
        			$jump = false;
        			if($i > 1 and $j <= $posLastTag){
        				$jump = true;
        				for($k=$posLastTag; $k >= $j; $k--){
        					//echo "chiudo un TAG (".$tagInsert[$k].") $j<br/><br/>";
        					$myXml .= "</".$tagInsert[$k].">\n\n";
        					$tagInsert[$k] = "";
        				}
        			}
        			if($i > 1 and $jump == false){
        				//echo "chiudo un tag (".$rowCsv[$i-1][$j].")<br/><br/>";
        				$myXml .= "</".$rowCsv[$i-1][$j].">\n\n";
        				unset($tagInsert[array_search($rowCsv[$i-1][$j], $tagInsert)]);
        			}
        			//echo "aggiungo il tag (".$rowCsv*[$j].")<br/><br/>";
        			$tagInsert[$j] = $rowCsv*[$j];
        			$myXml .= "<".$rowCsv*[$j].">\n\n";
        		}
        		if($j > $posLastTag){
        			//echo "Scrivo tag alunno<br/>";
        			$myXml .= "<".trim($rowCsv[0][$j]).">".trim($rowCsv*[$j])."</".trim($rowCsv[0][$j]).">\n";
        		}
        		
        		//print_r($tagInsert);
        		//echo "<br/>";
        	}
        }
        
        return $myXml;
        
    }
    

    [/PHP]

    Il parametro della funzione è l'ultimo nodo necessario, ovvero la matricola nel mio caso.


  • ModSenior

    L'ho trovato anche io quel riferimento ieri. 🙂
    Non mi convince molto però l'xml che ne crea...