Importer XML -> Mysql (DOM)
Posté : 15 mai 2012, 23:26
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
[xml]
<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:DeliveryInstruction>TEL AVANT CERET POUR QUE LA CLIENTE INDIQUE LE CHEMIN</ns1:DeliveryInstruction>
<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>
[/xml]
Voici mon traitement des données avec DOM
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.
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
[xml]
<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:DeliveryInstruction>TEL AVANT CERET POUR QUE LA CLIENTE INDIQUE LE CHEMIN</ns1:DeliveryInstruction>
<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>
[/xml]
Voici mon traitement des données avec DOM
$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.