Выход SimpleXML в MySQL - PullRequest
       1

Выход SimpleXML в MySQL

0 голосов
/ 07 декабря 2010

Я хочу прочитать следующий 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 вопрос. 1) Бывают случаи, когда мне нужно обработать 2 карты в одном предложении ACCOUNT. Как мне справиться с такими ситуациями?

1 Ответ

0 голосов
/ 07 декабря 2010

Вы можете сделать это трудным путем.

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

...