Bonjour

je suis bloqué face à cette boucle permettant d'inserer des données via un fichier xml selon leur type

le fichier xml est comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="ISO-8859-1" ?>
<MAP name="" isArray="true">
    <MAP name="__index__value__0" isArray="false">
        <TIMESTAMP name="dateupload">2010-01-00T00:00:00.000</TIMESTAMP>
        <STR name="encoding">flv</STR>
        <STR name="filename">file_0.flv</STR>
        <STR name="lastseen">USA</STR>
        <UINT32 name="mediaId">0</UINT32>
        <STR name="owner">JOHN</STR>
        <UINT32 name="size">0</UINT32>
    </MAP>
    <MAP name="__index__value__1" isArray="false">
        <TIMESTAMP name="dateupload">2010-01-01T00:00:01.000</TIMESTAMP>
        <STR name="encoding">mp4</STR>
        <STR name="filename">file_1.flv</STR>
        <STR name="lastseen">USA</STR>
        <UINT32 name="mediaId">1</UINT32>
        <STR name="owner">PIERRE</STR>
        <UINT32 name="size">11</UINT32>
    </MAP>
</MAP>
ma table est comme ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
create table donnees
(
	id bigserial not null primary key,
	event_id bigint not null references events(id),
	attribute_id integer not null references event_attribute_types(id),
	bool_value boolean null,
	integer_value integer null,
	double_value real null,
	timestamp_value timestamp without time zone null,
	text_value text null
);

je voudrrais pouvoir inserer les données dans la table selon leur type c'est a dire le type timestamp du fichier xml dans timestamp_value etc etc

j'ai fait comme ça mais sans succès

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public function SaveAttributeValue($eventId,$attributid)
   {
   		$connect = $this->OpenPgsqlConnect();
		$xmlParsed = $this->LoadXml("file.xml");
		foreach($xmlParsed as $val)
		{
			$tabSTR = array(); 
			$tabTIMESTP = array();
			$tabINT = array();
			foreach($val->STR as $valeur)
			{
				$tabSTR[] = strval($valeur);
			}
			foreach($val->TIMESTAMP as $valeur)
			{
				$tabTIMESTP[] = strval($valeur);
			}
			foreach($val->UINT32 as $valeur)
			{
				$tabINT[] = strval($valeur);
			}
		}
 
	    $sql = "INSERT INTO event_attributes (event_id,attribute_id,bool_value,integer_value,double_value,timestamp_value,text_value) VALUES(?,?,?,?,?,?,?)";
		$stmt = $connect->prepared($sql);
		for($i=0;$i<count($tabINT);$i++) 
		{
             for($j=0;$j<count($tabTIMESTP);$j++)
             {
				for ($k=0;$k<count($tabSTR);$k++)
				{
	             	try 
					{
						$connect->beginTransaction();
						//Insert the data in the strings table
						$stmt->execute(array($eventId,$attributid,NULL,$tabINT[$i],NULL,$tabTIMESTP[$j],$tabSTR[$k]));
						$connect->commit();
 
						//return the last insert id for each insertion
						$last = $connect->pgsqlLastInsertId($sql,$test);
				        $LastInsertIdEventType[]=$last;	
					} catch(PDOException $e) {
						$connect->rollback();
				        echo 'Erreur : '.$e->getMessage().'<br />';
				   		echo 'N° : '.$e->getCode();
					} 
				}	
             }	
	}	   
}
les paramètres seront renseignée lors de l'appel de cette methode dans une autre méthode de la classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function SaveXml()
	{
		$idEvent = $this->insertIntoEvent();
		$eventAttrExist = $this->EventAttributeTypeExists();
		if($eventAttrExist)
		{
			$idOfEventsAttributeType = $this->GetEventAttributeType();
			print "<pre>";
			print_r($idOfEventsAttributeType);
			print "</pre>";
 
		}else{
 
			$idOfEventAttributeTypeCreate = $this->CreateEventAttributeType();
			print "<pre>";
			print_r($idOfEventAttributeTypeCreate);
			print "</pre>";
		}
 
		for($i=0;$i<count($idEvent);$i++)
	    {
	   		for($j=0;$j<count($idOfEventAttributeTypeCreate);$j++)
	   		{
	   			$this->SaveAttributeValue($idEvent[$i],$idOfEventAttributeTypeCreate[$j]);
	   		}
	    }
}

Donc pour chaque insertion les autres champs pourront avoir un valeur NULL
par exemple pour le timestamp value si j'insère la date_upload du fichier xml
les autres champs seront null sauf les deux clé étrangère.

Pour la clé étrangère attribute_id j'ai du mal à faire correspondre à chaque ligne car $idOfEventAttributeTypeCreate me retourne l'id correspondant à chaque donnée du fichier xml enregistré dans une autre table : par exemple ces données sont dateupload, filename , etc du fichier xml

si vous pouvez m' eclaircire un peu sur ce probleme, je galère pendant pas mal de jour
merci