Bonjour,
Je souhaite importer à la volée différentes valeurs contenus dans un fichier XML.
Je récupère bien les données souhaitées mais l'insertion ne prend en compte que la dernière valeur des éléments voulus.

Voici le XML en question

Code xml : 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<ns1:Order OrderID="1-2012.115.0713702" OrderDate="2012-04-24T13:17:42+02:00" CurrencyCode="EUR">
 <ns1:OrderLine OrderLineID="2229-1-2012.115.0713702-7" StatusCode="Accepted" StatusDate="2012-04-25T15:16:58.748+02:00">
  <ns1:Item ItemRedouteID="0WPMP7GH" ItemStandardID="">
   <ns1:Offer OfferID="13944147" SellerOfferID="8999">
    <ns1:InitialSellingPrice>3.8E1</ns1:InitialSellingPrice>
    <ns1:DiscountedSellingPrice>3.8E1</ns1:DiscountedSellingPrice>                                
    <ns1:WEEEFee>0.0E0</ns1:WEEEFee>                                                              
    <ns1:Delivery DeliveryMode="Home" DeliveryType="Regular">
     <ns1:DeliveryFee>5.0E0</ns1:DeliveryFee>
     <ns1:DeliveryAddress>                                                                          
      <ns1:Name1> </ns1:Name1>
      <ns1:Address1> </ns1:Address1>
      <ns1:ZIPCode>66400</ns1:ZIPCode>
      <ns1:City>TAILLET</ns1:City>
      <ns1:CountryCode>FR</ns1:CountryCode>
     </ns1:DeliveryAddress>
    </ns1:Delivery>
   </ns1:Offer>  
  </ns1:Item>
  <ns1:Quantity QuantityQualifier="1" MeasureUnit="H87">1.0E0</ns1:Quantity>
  <ns1:CreationLog CreationDate="2012-04-24T13:17:46.136+02:00"/>
  <ns1:UpdateLog UpdateDate="2012-04-25T15:16:58.748+02:00"/>
 </ns1:OrderLine>
 <ns1:BillingAddress>
  <ns1:Name1> </ns1:Name1>
  <ns1:Address1> </ns1:Address1>
  <ns1:ZIPCode> </ns1:ZIPCode>
  <ns1:City> </ns1:City>
  <ns1:CountryCode>FR</ns1:CountryCode>
 </ns1:BillingAddress>
 <ns1:ReceiverCustomer CustomerID="1-173181841"/>
</ns1:Order>
<ns1:Order OrderID="1-2012.115.0824598" OrderDate="2012-04-24T17:26:56+02:00" CurrencyCode="EUR">
 <ns1:OrderLine OrderLineID="2229-1-2012.115.0824598-5" StatusCode="Accepted" StatusDate="2012-04-25T15:17:20.873+02:00">
  <ns1:Item ItemRedouteID="0WPMPYPN" ItemStandardID="">
   <ns1:Offer OfferID="14009275" SellerOfferID="9614">
    <ns1:InitialSellingPrice>2.28E2</ns1:InitialSellingPrice>
    <ns1:DiscountedSellingPrice>2.28E2</ns1:DiscountedSellingPrice>
    <ns1:WEEEFee>0.0E0</ns1:WEEEFee>
    <ns1:Delivery DeliveryMode="Home" DeliveryType="Regular">
     <ns1:DeliveryFee>0.0E0</ns1:DeliveryFee>
     <ns1:DeliveryAddress>
      <ns1:Name1> </ns1:Name1>
      <ns1:Address1> </ns1:Address1>
      <ns1:ZIPCode>59100</ns1:ZIPCode>
      <ns1:City>ROUBAIX</ns1:City>
      <ns1:CountryCode>FR</ns1:CountryCode>                                                  
     </ns1:DeliveryAddress>
    </ns1:Delivery>
   </ns1:Offer>
  </ns1:Item>
  <ns1:Quantity QuantityQualifier="1" MeasureUnit="H87">1.0E0</ns1:Quantity>
  <ns1:CreationLog CreationDate="2012-04-24T17:26:58.041+02:00"/>
  <ns1:UpdateLog UpdateDate="2012-04-25T15:17:20.873+02:00"/>
 </ns1:OrderLine>
 <ns1:BillingAddress>
  <ns1:Name1> </ns1:Name1>
  <ns1:Address1> </ns1:Address1>
  <ns1:ZIPCode> </ns1:ZIPCode>
  <ns1:City> </ns1:City>
  <ns1:CountryCode>FR</ns1:CountryCode>
 </ns1:BillingAddress>
 <ns1:ReceiverCustomer CustomerID="1-608988424"/>
</ns1:Order>
<ns1:Order OrderID="1-2012.115.0765303" OrderDate="2012-04-24T15:33:17+02:00" CurrencyCode="EUR">
 <ns1:OrderLine OrderLineID="2229-1-2012.115.0765303-1" StatusCode="Accepted" StatusDate="2012-04-25T15:17:42.209+02:00">
  <ns1:Item ItemRedouteID="0WPMP6JF" ItemStandardID="">
   <ns1:Offer OfferID="13943893" SellerOfferID="3492">
    <ns1:InitialSellingPrice>3.9E1</ns1:InitialSellingPrice>
    <ns1:DiscountedSellingPrice>3.9E1</ns1:DiscountedSellingPrice>
    <ns1:WEEEFee>0.0E0</ns1:WEEEFee>
    <ns1:Delivery DeliveryMode="Home" DeliveryType="Regular">
     <ns1:DeliveryFee>5.0E0</ns1:DeliveryFee>
     <ns1:DeliveryAddress>
      <ns1:Name1> </ns1:Name1>
      <ns1:Address1> </ns1:Address1>
      <ns1:ZIPCode>03100</ns1:ZIPCode>
      <ns1:City>MONTLUCON</ns1:City>
      <ns1:CountryCode>FR</ns1:CountryCode>
     </ns1:DeliveryAddress>
    </ns1:Delivery>
   </ns1:Offer>
  </ns1:Item>
  <ns1:Quantity QuantityQualifier="1" MeasureUnit="H87">1.0E0</ns1:Quantity>
  <ns1:CreationLog CreationDate="2012-04-24T15:33:19.823+02:00"/>
  <ns1:UpdateLog UpdateDate="2012-04-25T15:17:42.209+02:00"/>
 </ns1:OrderLine>
 <ns1:BillingAddress>
  <ns1:Name1> </ns1:Name1>
  <ns1:Address1> </ns1:Address1>
  <ns1:ZIPCode> </ns1:ZIPCode>
  <ns1:City> </ns1:City>
  <ns1:CountryCode>FR</ns1:CountryCode>
 </ns1:BillingAddress>
 <ns1:ReceiverCustomer CustomerID="1-591386271"/>
</ns1:Order>


Voici mon traitement des données avec DOM en PHP

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
$dom = new DomDocument;
$dom->load('2229.MKP_OrderResponse.001.2012-05-14-15-51-33.xml');
 
$listeorder = $dom->getElementsByTagName('Order');
foreach($listeorder as $order)
 echo "OrderID: " .$order->getAttribute("OrderID") . "<br />";
 $order_id = $order->getAttribute("OrderID");
 
foreach($listeorder as $order)
 echo "OrderDate: " .$order->getAttribute("OrderDate") . "<br />";
 
$listeorderline = $dom->getElementsByTagName('OrderLine');
foreach($listeorderline as $orderline)
 echo "OrderlineID: " .$orderline->getAttribute("OrderLineID") . "<br />";
 $orderlineID = $orderline->getAttribute("OrderLineID");
 
foreach($listeorderline as $orderline)
 echo "StatusCode: " .$orderline->getAttribute("StatusCode") . "<br />";
 $status = $orderline->getAttribute("StatusCode");
 
$listeitem = $dom->getElementsByTagName('Item');
foreach($listeitem as $item)
 echo "ItemStandardID: " .$item->getAttribute("ItemStandardID") . "<br />";
 
$listeproductid = $dom->getElementsByTagName('Offer');
foreach($listeproductid as $product_id)
 echo "ProductID: " .$product_id->getAttribute("SellerOfferID") . "<br />";
 $id_product = $product_id->getAttribute("SellerOfferID");
 
$listeprice = $dom->getElementsByTagName('InitialSellingPrice');
foreach($listeprice as $initialprice)
 echo "InitialSellingPrice: " .((double)$initialprice->firstChild->nodeValue) . "<br />";
 
$listepricediscount = $dom->getElementsByTagName('DiscountedSellingPrice');
foreach($listepricediscount as $discountprice)
 echo "DiscountedSellingPrice: " .((double)$discountprice->firstChild->nodeValue) . "<br />";
 
$listedelivery = $dom->getElementsByTagName('DeliveryFee');
foreach($listedelivery as $delivery_fee)
 echo "DeliveryFee: " .((double)$delivery_fee->firstChild->nodeValue) . "<br />";
 
foreach($dom->getElementsByTagName('DeliveryAddress') as $delivery)
 foreach ($delivery->getElementsByTagName('ZIPCode') as $zip)
  echo "Code Postal: " .$zip->firstChild->nodeValue . "<br />";
 
foreach($dom->getElementsByTagName('DeliveryAddress') as $delivery)
 foreach ($delivery->getElementsByTagName('City') as $ville)
  echo "Ville: " .$ville->firstChild->nodeValue . "<br />";
 
foreach($dom->getElementsByTagName('DeliveryAddress') as $delivery)
 foreach ($delivery->getElementsByTagName('CountryCode') as $country_code)
  echo "Pays: " .$country_code->firstChild->nodeValue . "<br />";
 
$quantite = $dom->getElementsByTagName('Quantity');
foreach($listeorderline as $orderline)
 echo "Quantité: ".((double)$quantite) . "<br />";
 
$listecustomerid = $dom->getElementsByTagName('ReceiverCustomer');
foreach($listecustomerid as $customer)
 echo "CustomerID: " .$customer->getAttribute("CustomerID") . "<br />";
 $customer = $customer->getAttribute("CustomerID");
 
$insert_order = "INSERT INTO ps_redoute_order VALUES ('', '".$orderlineID."', '".$order_id."', 'Madame', 'Client', 'Redoute', '', '', '', '".$customer ."@redoute.fr"."', '', '', '".$zip->firstChild->nodeValue ."', '".$ville->firstChild->nodeValue ."', '".$country_code->firstChild->nodeValue ."', '".((double)$discountprice->firstChild->nodeValue) ."', '".((double)$delivery_fee->firstChild->nodeValue) ."', '".$customer."')";
$order = mysql_query($insert_order, $base) or die(mysql_error());
?>
L'insertion s'effectue mais seule la dernière valeur des éléments sélectionnés s'insère.
Ce qui fait qu'au final je n'ai qu'une seule ligne insérée.
Je souhaite que l'insertion s'effectue à la volée pour les différentes valeurs rencontrées.

Je vous remercie d'avance pour votre aide et votre compréhension.