我想阅读从我的电子商务网站收到的以下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张卡。我该如何处理这种情况?
答案 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
。