あなたが持っている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;
ここで必要なのは、XMLを開き、作業する顧客要素を指定することだけです。
$customers = simplexml_load_string($test)->customer; // "test.xml"
次に、各顧客をforeachし、値を取得してエスケープし、クエリに挿入してSQLクエリを実行する(または複数のレコードを含む1つの大きなクエリを作成する)だけです。
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)); }}