Untuk data XML yang Anda miliki, saya lebih suka ekstensi SimpleXML, itu dikirimkan dengan semua yang Anda butuhkan dan tidak banyak kode untuk ditulis (ini adalah adik perempuan DOMDocument).
Jadi untuk setiap pelanggan dalam data input, Anda ingin mengambil 9 atau lebih nilai Anda. Anda dapat merumuskan nilai-nilai itu sebagai xpath:
$values = <<<XPATH
(
name
|address
|city
|state
|zip
|phone
|buyerinfo/shippingaddress/name
|buyerinfo/shippingaddress/address
|shippingDetail/saletax/saletaxamount
)
XPATH;
Ini berfungsi mirip dengan kueri basis data. Anda membuat string yang berisi kueri, untuk XML dalam bahasa Xpath.
Dan kami melakukan hal yang sama untuk SQL karena keduanya harus berjalan beriringan, jadi inilah pola SQL yang sesuai:
$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;
Yang dibutuhkan sekarang adalah membuka XML dan menentukan elemen pelanggan untuk dikerjakan:
$customers = simplexml_load_string($test)->customer; // "test.xml"
Kemudian Anda hanya perlu melakukan foreach atas setiap pelanggan, mendapatkan nilai, menghindarinya, memasukkannya ke dalam kueri dan menjalankan kueri SQL (atau membuat satu kueri yang lebih besar yang berisi lebih dari satu catatan):
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
// ...
}
Ya, itu sudah menjadi kode Anda. Seperti yang Anda lihat, Memanfaatkan array, xpath, dan SQL, Anda dapat menyederhanakan ini secara luas.
Untuk pelanggan pertama dalam sampel-XML Anda, ini kemudian menghasilkan kueri berikut:
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'
)
Seluruh contoh kode:
$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) ); }}