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
L'insertion s'effectue mais seule la dernière valeur des éléments sélectionnés s'insère.
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()); ?>
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.
Partager