2010-12-07 71 views
-3

我想讀取從我的電子商務網站收到的以下XML文件,並在MySQL中插入記錄。我嘗試過使用simpleXML,但它似乎沒有工作。SimpleXML輸出到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> 

我已經編寫了以下按預期工作的代碼。

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

但我有1個問題要問。 1)有時我需要在同一個ACCOUNT子句中處理2張卡片。我如何處理這種情況?

+0

插入賬戶值('1','HAA_00','CAD','00','0.00','0.00','0.00','1234567890208108','Y','PCAD','PTYCSH ','00000406','02','2013-03-31','HAA_00','CAD'); #期望的輸出 – shantanuo 2010-12-07 06:37:00

+0

這不是XML - 沒有根節點。 – Quentin 2010-12-07 13:01:38

回答

0

你可以做到這一點很難。

$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; 

考慮在數據庫中INT,DECIMAL,DATE改變一些列的類型和使用vsprintf()添加$data$sql