За XML данните, които имате, бих предпочел разширението SimpleXML, то се доставя с всичко необходимо и не е толкова много код за писане (това е малката сестра на DOMDocument).
Така че за всеки клиент във входните данни искате да извлечете вашите 9 или повече стойности. Можете да формулирате тези стойности като xpath:
$values = <<<XPATH
(
name
|address
|city
|state
|zip
|phone
|buyerinfo/shippingaddress/name
|buyerinfo/shippingaddress/address
|shippingDetail/saletax/saletaxamount
)
XPATH;
Това работи подобно на заявката за база данни. Вие създавате низ, който съдържа заявката, за XML на езика Xpath.
И ние правим същото за SQL, тъй като и двете трябва да вървят ръка за ръка, така че ето е съответния SQL модел:
$pattern = <<<SQL
INSERT INTO customer
(
name, address, city, state, zip, phone, shipto, shipadderss, tax
)
VALUES
(
'%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
)
SQL;
Всичко, което трябва сега, е да отворите XML и да посочите елементите на клиента, върху които да работите:
$customers = simplexml_load_string($test)->customer; // "test.xml"
След това трябва само да достигнете до всеки клиент, да получите стойностите, да ги избегнете, да ги вмъкнете в заявката и да изпълните SQL заявката (или да създадете една по-голяма заявка, съдържаща повече от един запис):
foreach ($customers as $customer)
{
$data = $customer->xpath($values);
$escaped = array_map('mysql_real_escape_string', $data);
$query = vsprintf($pattern, $escaped);
// you can now run the query now
// ...
}
Да, това вече е вашият код. Както можете да видите, като използвате масиви, xpath и SQL, можете да опростите това до голяма степен.
За първия клиент във вашия примерен XML след това генерира следната заявка:
INSERT INTO customer
(
name, address, city, state, zip, phone, shipto, shipadderss, tax
)
VALUES
(
'customer 1','address 1', 'city 1', 'state 1', 'zip 1', 'phone 1', 'ship to', 'Ship address1', '2'
)
Целият код-пример:
$values = <<<XPATH
(
name
|address
|city
|state
|zip
|phone
|buyerinfo/shippingaddress/name
|buyerinfo/shippingaddress/address
|shippingDetail/saletax/saletaxamount
)
XPATH;
$pattern = <<<SQL
INSERT INTO customer
(
name, address, city, state, zip, phone, shipto, shipadderss, tax
)
VALUES
(
'%s','%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
)
SQL;
$customers = simplexml_load_string($test)->customer; // "test.xml"
foreach ($customers as $customer)
{
$data = $customer->xpath($values);
$escaped = array_map('mysql_real_escape_string', $data);
$query = vsprintf($pattern, $escaped);
// you can now run the query now
$result = mysql_query($query);
if(mysql_errno())
{
printf(
'<h4 style="color: red;">Query Error:</h4>
<p>(%s) - %s</p>
<p>Query:
<pre>%s</pre>
</p>
<hr />',
mysql_errno(),
htmlspecialchars(mysql_error()),
htmlspecialchars($query)
);
}
}
', mysql_errno(), htmlspecialchars(mysql_error()), htmlspecialchars($query) ); }}