SimpleXML输出到MySQL

时间:2010-12-07 06:11:58

标签: php xml simplexml

我想阅读从我的电子商务网站收到的以下XML文件,并在MySQL中插入记录。我尝试使用simpleXML,但它似乎没有用。

<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)有时我需要在同一个ACCOUNT子句中处理2张卡。我该如何处理这种情况?

1 个答案:

答案 0 :(得分: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