2010-12-07 13 views
-3

Je souhaite lire le fichier XML suivant reçu de mon site e-commerce et insérer les enregistrements dans MySQL. Je l'ai essayé en utilisant simpleXML mais ça ne semble pas fonctionner.Sortie SimpleXML vers MySQL

<ACCOUNT NumCrds="1"> 
<ACCNO>HAA_00</ACCNO> 
<CURRCODE>CAD</CURRCODE> 
<ACCTYPE>00</ACCTYPE> 
<FINAMT>0.00</FINAMT> 
<BLKAMT>0.00</BLKAMT> 
<AMTAVL>0.00</AMTAVL> 
<CARD> 
<PANNU>1234567890208108</PANNU> 
<PRIMARY>Y</PRIMARY> 
<CRDPRODUCT>PCAD</CRDPRODUCT> 
<PROGRAMID>PTYCSH</PROGRAMID> 
<CUSTCODE>00000406</CUSTCODE> 
<STATCODE>02</STATCODE> 
<EXDATE>2013-03-31</EXDATE> 
<CRDACCNO>HAA_00</CRDACCNO> 
<CRDCURRCODE>CAD</CRDCURRCODE> 
</CARD> 
</ACCOUNT> 

<ACCOUNT NumCrds="1"> 
<ACCNO>XYZCESFULL9900</ACCNO> 
<CURRCODE>CAD</CURRCODE> 
<ACCTYPE>00</ACCTYPE> 
<FINAMT>0.00</FINAMT> 
<BLKAMT>0.00</BLKAMT> 
<AMTAVL>0.00</AMTAVL> 
<CARD> 
<PANNU>0987654321756990</PANNU> 
<PRIMARY>Y</PRIMARY> 
<CRDPRODUCT>PCAD</CRDPRODUCT> 
<PROGRAMID>PTYCSH</PROGRAMID> 
<CUSTCODE>00000520</CUSTCODE> 
<STATCODE>00</STATCODE> 
<EXDATE>2013-04-30</EXDATE> 
<CRDACCNO>XYZCESFULL9900</CRDACCNO> 
<CRDCURRCODE>CAD</CRDCURRCODE> 
</CARD> 
</ACCOUNT> 

J'ai écrit le code suivant qui fonctionne comme prévu.

<?php 
$sxe = simplexml_load_file("balexp.xml"); 
foreach($sxe->ACCOUNT as $item) { 
$mysql="insert into test.mytable values ('".$item->ACCNO."','".$item->CURRCODE."')"; 
echo $mysql; 
} 
?> 

Mais j'ai une question à poser. 1) Il y a des moments où j'ai besoin de traiter 2 cartes dans la même clause ACCOUNT. Comment puis-je gérer de telles situations?

+0

insérer dans les comptes les valeurs ('1', 'HAA_00', 'CAD', '00', '0.00', '0.00', '0.00', '1234567890208108', 'Y', 'PCAD', 'PTYCSH ',' 00000406 ',' 02 ',' 2013-03-31 ',' HAA_00 ',' CAD '); # output attendu – shantanuo

+0

Ce n'est pas XML - il n'y a pas de noeud racine. – Quentin

+0

php -e xmlread.php | mysql # c'est comme ça que je pousse les disques vers MySQL mais j'aimerai savoir la bonne façon. – shantanuo

Répondre

0

Vous pourriez le faire à la dure.

$dom = new DOMDocument(); 
$dom->loadXML('<root>'. $xmlstr .'</root>'); 
$xml = simplexml_import_dom($dom); 

$sql = 'INSERT INTO accounts VALUES'; 
foreach ($xml as $node) { 
    $data = array(
     (string) $node->attributes()->NumCrds, 
     (string) $node->ACCNO, 
     // ... 
     (string) $node->CARD->PANNU, 
     // ... 
    ); 
    $sql .= " ('". implode("', '", $data) ."'),"; 
} 
$sql = rtrim($sql, ','); 

print $sql; 

certains types Pensez à changer de colonne dans votre base de données INT, DECIMAL, DATE et utiliser vsprintf() ajouter $data à $sql.

+0

On dirait une de mes réponses ce matin: D – Shikiryu