IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM XML] Importer XML -> Mysql


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 45
    Points
    45
    Par défaut [DOM XML] Importer XML -> Mysql
    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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 45
    Points
    45
    Par défaut
    Voici comment j'ai pu arriver à mes fins

    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
     
    <?php
    $dom = new DomDocument;
    $dom->load($filename);
    $listeorder = $dom->getElementsByTagName('Order');
    foreach($listeorder as $order){
     echo "OrderID: " .$order->getAttribute("OrderID") . "<br />";
     $order_id = $order->getAttribute("OrderID");
     echo "OrderDate: " .$order->getAttribute("OrderDate") . "<br />";
    foreach ($order->getElementsByTagName('OrderLine') as $orderline){
     echo "OrderlineID: " .$orderline->getAttribute("OrderLineID") . "<br />";
     $orderlineID = $orderline->getAttribute("OrderLineID");
     echo "StatusCode: " .$orderline->getAttribute("StatusCode") . "<br />"; 
    }
    foreach ($order->getElementsByTagName('Offer') as $product_id){
     echo "ProductID: " .$product_id->getAttribute("SellerOfferID") . "<br />";
     $id_product = $product_id->getAttribute("SellerOfferID");
    }
    foreach ($order->getElementsByTagName('InitialSellingPrice') as $initialprice){
     echo "InitialSellingPrice: " .((double)$initialprice->firstChild->nodeValue) . "<br />";
    }
    foreach ($order->getElementsByTagName('DiscountedSellingPrice') as $discountprice){
     echo "DiscountedSellingPrice: " .((double)$discountprice->firstChild->nodeValue) . "<br />";
    }
    foreach ($order->getElementsByTagName('DeliveryFee') as $delivery_fee){
     echo "DeliveryFee: " .((double)$delivery_fee->firstChild->nodeValue) . "<br />";
    }
    foreach ($order->getElementsByTagName('DeliveryAddress') as $delivery){
     foreach ($delivery->getElementsByTagName('ZIPCode') as $zip){
      echo "Code Postal: " .$zip->firstChild->nodeValue . "<br />";
     }
     foreach ($delivery->getElementsByTagName('City') as $ville){
      echo "Ville: " .$ville->firstChild->nodeValue . "<br />";
     }
     foreach ($delivery->getElementsByTagName('CountryCode') as $country_code){
      echo "Pays: " .$country_code->firstChild->nodeValue . "<br />";
     }
    }
    foreach ($order->getElementsByTagName('Quantity') as $quantite){
     echo "Quantité: " .((double)$quantite->firstChild->nodeValue) . "<br />";
    }
    foreach ($order->getElementsByTagName('ReceiverCustomer') 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', '', '', '', '".$order_id ."@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());
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Importer XML dans une base de données
    Par stardeus dans le forum XQUERY/SGBD
    Réponses: 17
    Dernier message: 12/07/2011, 11h14
  2. Import XML (xmlns) vers MySQL
    Par basketime dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 02/04/2007, 16h27
  3. [XML][MYSQL] Importation données XML vers BDD MySql
    Par Ben-o dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 04/05/2006, 18h13
  4. [XML][XSLT]XML pour remplacer MySQL?
    Par ChriGoLioNaDor dans le forum XQUERY/SGBD
    Réponses: 9
    Dernier message: 28/04/2006, 01h24
  5. xml - création xml via php(mysql) - manque données
    Par Raiders dans le forum XQUERY/SGBD
    Réponses: 5
    Dernier message: 23/03/2006, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo