Da Xml a Mysql

master1986

Utente Attivo
8 Ott 2012
234
0
16
Ciao a tutti, dovrei leggere dei dati da file Xml che si trovano sul Wev e importarli in un database Mysql

Nel file xml ci sono dei valori che dovranno essere salvati nel database in alcune tabelle.

Partiamo dal presupposto che nel file xml ho questi valori

Numero
Colore
Intensità


Come faccio a leggerli e importarli nella tabella mysql?


Se riesco a fare questo passaggio poi dovrò utilizzare le librerie gd :)
 
PHP:
$xml = simplexml_load_file( 'percorso/file.xml' );

mysql_connect();
mysql_select_db();

$query = 'INSERT INTO tabella ( numero, colore, intensità ) VALUES ( "'.$xml -> numero.'", "'.$xml -> colore.'", "'.$xml -> intensita.'" ) ';

$result = mysql_query( $query );

mysql_close();

mysql_free_result( $result );
 
PHP:
$xml = simplexml_load_file( 'percorso/file.xml' );

mysql_connect();
mysql_select_db();

$query = 'INSERT INTO tabella ( numero, colore, intensità ) VALUES ( "'.$xml -> numero.'", "'.$xml -> colore.'", "'.$xml -> intensita.'" ) ';

$result = mysql_query( $query );

mysql_close();

mysql_free_result( $result );




Grazie mr php :)



Nel mio caso il mio hoster è aruba

quindi ho:

host
nome db
user db
password


come li inserisco nel codice?
 
Grazie mr php :)



Nel mio caso il mio hoster è aruba

quindi ho:

host
nome db
user db
password


come li inserisco nel codice?
Devi inserire host,user e password in mysql_connect() e il nome del db in mysql_select_db()

ps: date il buon esempio, usate mysqli :rolleyes:
 
Ragazzi se vi allego il file xml mi date una mano a creare le tabelle?

Sinceramente non so come fare

Premetto che il file Xml contiene dati meteo, temperatura, situazione meteo ecc ecc, è abbastanza corto, il tutto diviso in giorni.


fatto questo poi dovrei creare un file php che attraverso le librerie gd mi richiami le variabili e le metta su una mappa
 
Grazie mille, se il tutto può riuscire sarebbe una bella cosa

Ecco il file xml contenenti i dati meteo:

Codice:
<report>
<location city="Roma [Roma;Italia]">
<interesting>
<url description="predizione">
http://
</url>
</interesting>
<var>
<name>Temperatura minima</name>
<icon>4</icon>
<data>
<forecast data_sequence="1" value="-2"/>
<forecast data_sequence="2" value="-3"/>
<forecast data_sequence="3" value="-6"/>
<forecast data_sequence="4" value="-7"/>
<forecast data_sequence="5" value="-8"/>
<forecast data_sequence="6" value="0"/>
<forecast data_sequence="7" value="-4"/>
</data>
</var>
<var>
<name>Temperatura massima</name>
<icon>5</icon>
<data>
<forecast data_sequence="1" value="7"/>
<forecast data_sequence="2" value="2"/>
<forecast data_sequence="3" value="2"/>
<forecast data_sequence="4" value="0"/>
<forecast data_sequence="5" value="4"/>
<forecast data_sequence="6" value="7"/>
<forecast data_sequence="7" value="4"/>
</data>
</var>
<var>
<name>Vento</name>
<icon>9</icon>
<data>
<forecast data_sequence="1" id="7" value="Vento debile dal ovest"/>
<forecast data_sequence="2" id="9" value="Vento moderato dal nord"/>
<forecast data_sequence="3" id="6" value="Vento debile da sud-ovest"/>
<forecast data_sequence="4" id="9" value="Vento moderato dal nord"/>
<forecast data_sequence="5" id="13" value="Vento moderato dal sud"/>
<forecast data_sequence="6" id="13" value="Vento moderato dal sud"/>
<forecast data_sequence="7" id="5" value="Vento debole dal sud"/>
</data>
</var>
<var>
<name>Simbolo</name>
<icon>10</icon>
<data>
<forecast data_sequence="1" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="2" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="3" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="4" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="5" id="3" value="Nubi sparse"/>
<forecast data_sequence="6" id="7" value="Cielo coperto con pioggia debole"/>
<forecast data_sequence="7" id="18" value="Cielo nuvoloso con intemperie nevose"/>
</data>
</var>
<var>
<name>Giorno</name>
<icon>15</icon>
<data>
<forecast data_sequence="1" value="Giovedi"/>
<forecast data_sequence="2" value="Venerdì"/>
<forecast data_sequence="3" value="Sabato"/>
<forecast data_sequence="4" value="Domenica"/>
<forecast data_sequence="5" value="Lunedi"/>
<forecast data_sequence="6" value="Martedì"/>
<forecast data_sequence="7" value="Mercoledì"/>
</data>
</var>
<var>
<name>Definizione di Atmosphere</name>
<icon>19</icon>
</var>
</location>
</report>
 
Ultima modifica:
La data del giorno è racchiusa in questo codice

<data>
<forecast data_sequence="1" value="-2"/>
<forecast data_sequence="2" value="-3"/>
<forecast data_sequence="3" value="-6"/>
<forecast data_sequence="4" value="-7"/>
<forecast data_sequence="5" value="-8"/>
<forecast data_sequence="6" value="0"/>
<forecast data_sequence="7" value="-4"/>
</data>


1= oggi
2= domani
3= dopo domani ecc

value sta per la temperatura in gradi, indica il valore della temperatura prevista nei vari giorni


e poi sono presenti gli altri parametri tra cui i simboli


<data>
<forecast data_sequence="1" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="2" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="3" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="4" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="5" id="3" value="Nubi sparse"/>
<forecast data_sequence="6" id="7" value="Cielo coperto con pioggia debole"/>
<forecast data_sequence="7" id="18" value="Cielo nuvoloso con intemperie nevose"/>
</data>



Praticamente quello che deve essere importato nel db deve essere il giorno, da 1 a 7 e poi l'id che sta per il nome del simbolo



un pò complessa come cosa, è fattibile?
 
Vi chiederete perchè non leggere direttamente l'xml e fare creare direttamente un immagine con le gd



il problema è che l'xml non sempre è corretto, (cioè può avere valori sballati), di conseguenza tramite un form io potrei variare i valori sul mysql correggendo il risultato della mappa

spero in un vostro prezioso aiuto
 
Vi inserisco brevemente quello che voglio realizzare:


1) Script che legge il file xml (contenente i dati meteo) e li invia al database mysql
2) script con libreria gd che prende i "valori" contenuti nel db e inserisce sulla mappa ottenendo questo
mappa_meteo.jpg
3) form che mi permette di variare i valori nel mysql in modo da cambiare il risultato della mappa


Forse è difficile ma credo che possiate aiutarmi data la vostra professionalità.
 
Un po grovigliosa ma fattibile. Imposterei il Database con le seguenti tabelle
Codice:
1) location -> ID - location
2) metalocation o valuelocation -> location - nome - icon - data - gradi - simbolo - descrizione
 
Un po grovigliosa ma fattibile. Imposterei il Database con le seguenti tabelle
Codice:
1) location -> ID - location
2) metalocation o valuelocation -> location - nome - icon - data - gradi - simbolo - descrizione

perfetto!

Praticamente a ogni file xml corrisponde una località.

sulla mappa ogni simbolo è derivato da una località.


Per quanto riguarda i simboli:

<name>Simbolo</name>
<icon>10</icon>
<data>
<forecast data_sequence="1" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="2" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="3" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="4" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="5" id="3" value="Nubi sparse"/>
<forecast data_sequence="6" id="7" value="Cielo coperto con pioggia debole"/>
<forecast data_sequence="7" id="18" value="Cielo nuvoloso con intemperie nevose"/>
</data>


i valori da 1 a 7 sono i giorni, mentre gli "id" vanno da 1 a 19, ogni numeretto sta per un simbolo che poi va richiamato con le librerie gd, esempio 1= sole 2= sole con nuvola 3= pioggia ecc ecc

la descrizione "cielo nuvoloso ecc" può anche non essere inserita sinceramente, però se si può mette ok :)
 
nel ftp io mi sono già creato tutti i simboli, da 1 a 19 per (la situazione meteo), da -20 a 40 (per le temperature) e la stessa cosa per i venti
 
per i venti invece

<data>
<forecast data_sequence="1" id="7" value="Vento debile dal ovest"/>
<forecast data_sequence="2" id="9" value="Vento moderato dal nord"/>
<forecast data_sequence="3" id="6" value="Vento debile da sud-ovest"/>
<forecast data_sequence="4" id="9" value="Vento moderato dal nord"/>
<forecast data_sequence="5" id="13" value="Vento moderato dal sud"/>
<forecast data_sequence="6" id="13" value="Vento moderato dal sud"/>
<forecast data_sequence="7" id="5" value="Vento debole dal sud"/>
</data>
</var>


vanno a 1 a 32

l'importante è importare il valore del giorno e il numeretto "id" che sta per il simbolo che poi andremo a richiamare
 
Attualmente ecco come faccio a leggere il file xml

Esempio il "simbolo"

<name>Simbolo</name>
<icon>10</icon>
<data>
<forecast data_sequence="1" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="2" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="3" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="4" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="5" id="3" value="Nubi sparse"/>
<forecast data_sequence="6" id="7" value="Cielo coperto con pioggia debole"/>
<forecast data_sequence="7" id="18" value="Cielo nuvoloso con intemperie nevose"/>
</data>


Lo leggo con questa funzione:

$Symbol = htmlentities($xml->location->day[0]->hour[0]->symbol[0]->attributes()->value,ENT_COMPAT,'UTF-8');
break;


E poi richiamo il simbolo immagin:

if ($Symbol == "1") {echo $variabile = imageCreateFromPng('1.png');}

la $variabile non è nient'altro che un nome che ho dato da richiamare poi con la libreria gd e stamparla in immagine

Praticamente l'ultima riga va portata fino al simbolo "20"




Ovviamente questo sistema è "diretto" con il file xml dal web, il mio obbiettivo è quello di leggerlo dal mysql
 
Ho tolto il campo simbolo dato che gia ce il campo icon
PHP:
			/* Script per inserire i valore nel DB */
			$xml = simplexml_load_file( 'percorso/file.xml' );
			
			$city = $xml->location->attributes()->city;
			$var = $xml->location->var;

			mysql_connect();
			mysql_select_db();
			
			$query = 'INSERT INTO location ( location ) VALUES ( "'.$city.'" )';
			$result = mysql_query($query);
			
			$query = 'SELECT ID FROM location WHERE location="'.$city.'"';
			$result = mysql_query($query);
			
			$obj = mysql_fetch_object($result);
			
			$id = $obj -> ID;
			
			mysql_close();
			
			mysql_free_result($result);


			foreach ( $var as $value ) {
					
				$name = $value->name;
				$icon = $value->icon;
				$data = $value->data;
				$data_sequence = '';
				$gradi = '';
				$desc = '';
				
				foreach ( $data as $value ) {
					
					$data_sequence .= $value->forecast[0]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[1]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[2]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[3]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[4]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[5]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[6]->attributes()->data_sequence;
					
					$gradi .= $value->forecast[0]->attributes()->id.'::';
					$gradi .= $value->forecast[1]->attributes()->id.'::';
					$gradi .= $value->forecast[2]->attributes()->id.'::';
					$gradi .= $value->forecast[3]->attributes()->id.'::';
					$gradi .= $value->forecast[4]->attributes()->id.'::';
					$gradi .= $value->forecast[5]->attributes()->id.'::';
					$gradi .= $value->forecast[6]->attributes()->id;
					
					$desc .= $value->forecast[0]->attributes()->value.'::';
					$desc .= $value->forecast[1]->attributes()->value.'::';
					$desc .= $value->forecast[2]->attributes()->value.'::';
					$desc .= $value->forecast[3]->attributes()->value.'::';
					$desc .= $value->forecast[4]->attributes()->value.'::';
					$desc .= $value->forecast[5]->attributes()->value.'::';
					$desc .= $value->forecast[6]->attributes()->value;
										
				}
				
				mysql_connect();
				mysql_select_db();
				
				$query = 'INSERT INTO metalocation ( location, nome, icon, data, gradi, description ) VALUES ( "'.$id.'", "'.$name.'", "'.$icon.'", "'.$data_sequence.'", "'.$gradi.'", "'.$desc.'" )';
				
				$result = mysql_query($query);
				mysql_close();
				
				mysql_free_result($result);
				
			}
 
Ultima modifica:
Dovresti inserire nel file xml alcune modifiche ora o finito di leggere i tuoi ultimi post il codice soprastante non andrebbe bene.
 
Ho tolto il campo simbolo dato che gia ce il campo icon
PHP:
			/* Script per inserire i valore nel DB */
			$xml = simplexml_load_file( 'percorso/file.xml' );
			
			$city = $xml->location->attributes()->city;
			$var = $xml->location->var;

			mysql_connect();
			mysql_select_db();
			
			$query = 'INSERT INTO location ( location ) VALUES ( "'.$city.'" )';
			$result = mysql_query($query);
			
			$query = 'SELECT ID FROM location WHERE location="'.$city.'"';
			$result = mysql_query($query);
			
			$obj = mysql_fetch_object($result);
			
			$id = $obj -> ID;
			
			mysql_close();
			
			mysql_free_result($result);


			foreach ( $var as $value ) {
					
				$name = $value->name;
				$icon = $value->icon;
				$data = $value->data;
				$data_sequence = '';
				$gradi = '';
				$desc = '';
				
				foreach ( $data as $value ) {
					
					$data_sequence .= $value->forecast[0]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[1]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[2]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[3]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[4]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[5]->attributes()->data_sequence.'::';
					$data_sequence .= $value->forecast[6]->attributes()->data_sequence;
					
					$gradi .= $value->forecast[0]->attributes()->id.'::';
					$gradi .= $value->forecast[1]->attributes()->id.'::';
					$gradi .= $value->forecast[2]->attributes()->id.'::';
					$gradi .= $value->forecast[3]->attributes()->id.'::';
					$gradi .= $value->forecast[4]->attributes()->id.'::';
					$gradi .= $value->forecast[5]->attributes()->id.'::';
					$gradi .= $value->forecast[6]->attributes()->id;
					
					$desc .= $value->forecast[0]->attributes()->value.'::';
					$desc .= $value->forecast[1]->attributes()->value.'::';
					$desc .= $value->forecast[2]->attributes()->value.'::';
					$desc .= $value->forecast[3]->attributes()->value.'::';
					$desc .= $value->forecast[4]->attributes()->value.'::';
					$desc .= $value->forecast[5]->attributes()->value.'::';
					$desc .= $value->forecast[6]->attributes()->value;
										
				}
				
				mysql_connect();
				mysql_select_db();
				
				$query = 'INSERT INTO metalocation ( location, nome, icon, data, gradi, description ) VALUES ( "'.$id.'", "'.$name.'", "'.$icon.'", "'.$data_sequence.'", "'.$gradi.'", "'.$desc.'" )';
				
				$result = mysql_query($query);
				mysql_close();
				
				mysql_free_result($result);
				
			}



Sei un grande :fonzie:


Aspetta perchè il campo "icon" è inutile, cioè non deriva nulla (non so perchè)

prendiamo questo xml

<data>
<name>Simbolo</name>
<icon>10</icon>
<data>
<forecast data_sequence="1" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="2" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="3" id="19" value="Cielo coperto con intemperie nevose"/>
<forecast data_sequence="4" id="18" value="Cielo nuvoloso con intemperie nevose"/>
<forecast data_sequence="5" id="3" value="Nubi sparse"/>
<forecast data_sequence="6" id="7" value="Cielo coperto con pioggia debole"/>
<forecast data_sequence="7" id="18" value="Cielo nuvoloso con intemperie nevose"/>
</data>


Praticamente quello che va a generare il simbolo è l'ID

infatti se andiamo a vedere il simbolo per la sequence=1 (oggi) è 18

18= sta per un simbolo diverso

non so se mi sono spiegato bene
 

Discussioni simili