आपके पास मौजूद XML डेटा के लिए मैं SimpleXML एक्सटेंशन पसंद करूंगा, यह आपकी जरूरत की हर चीज के साथ जहाज करता है और यह लिखने के लिए इतना कोड नहीं है (यह DOMDocument की छोटी बहन है)।
तो प्रत्येक ग्राहक . के लिए इनपुट डेटा में, आप अपने 9 या तो मान प्राप्त करना चाहते हैं। आप उन मानों को xpath के रूप में तैयार कर सकते हैं:
$values = <<<XPATH
(
name
|address
|city
|state
|zip
|phone
|buyerinfo/shippingaddress/name
|buyerinfo/shippingaddress/address
|shippingDetail/saletax/saletaxamount
)
XPATH;
यह डेटाबेस क्वेरी की तरह ही काम करता है। आप एक स्ट्रिंग बनाते हैं जिसमें Xpath भाषा में XML के लिए क्वेरी होती है।
और हम 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;
अब यह सब कुछ एक्सएमएल खोलने और काम करने के लिए ग्राहक तत्वों को निर्दिष्ट करने की है:
$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 का उपयोग करके, आप इसे काफी विस्तार तक सरल बना सकते हैं।
पहले ग्राहक . के लिए आपके नमूना-एक्सएमएल में यह निम्नलिखित क्वेरी उत्पन्न करता है:
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)); }}