【发布时间】:2013-04-12 16:52:37
【问题描述】:
代表问题的 xml 文件部分(xml 文件有数百个客户记录)
<?xml version="1.0" encoding="utf-8"?>
<test>
<customer>
<name>customer 1</name>
<address>address 1</address>
<city>city 1</city>
<state>state 1</state>
<zip>zip 1</zip>
<phone>phone 1</phone>
<buyerinfo>
<shippingaddress>
<name>ship to</name>
<address>Ship address1</address>
</shippingaddress>
</buyerinfo>
<shippingDetail>
<saletax>
<saletaxamount>2</saletaxamount>
</saletax>
</shippingDetail>
</customer>...
下面是我的代码
//Xml string is parsed and creates a DOM Document object
$responseDoc = new DomDocument();
$responseDoc->load('test.xml');
foreach ($responseDoc->getElementsByTagName('customer') as $customer){
$sSQL = sprintf(
"INSERT INTO customer (name, address, city, state, zip, phone, shipto, shipadderss, tax)
VALUES ('%s','%s', '%s', '%s','%s','%s', '%s','%s','%s')",
mysql_real_escape_string($customer->getElementsByTagName('name')->item(0)->nodeValue),
mysql_real_escape_string($customer->getElementsByTagName('address')->item(0)->nodeValue),
mysql_real_escape_string($customer->getElementsByTagName('city')->item(0)->nodeValue),
mysql_real_escape_string($customer->getElementsByTagName('state')->item(0)->nodeValue),
mysql_real_escape_string($customer->getElementsByTagName('zip')->item(0)->nodeValue),
mysql_real_escape_string($customer->getElementsByTagName('phone')->item(0)->nodeValue)
?
?
?
);
$rResult = mysql_query($sSQL);
if(mysql_errno() > 0)
{
printf(
'<h4 style="color: red;">Query Error:</h4>
<p>(%s) - %s</p>
<p>Query: %s</p>
<hr />',
mysql_errno(),
mysql_error(),
$sSQL
);
}
}
问题:
-
我如何访问获取 customer.buyerinfo.shippingaddress.name 节点值使用 mysql_real_escape_string 在我的插入语句中?用“???”表示
事实上我有两个节点名称相同的节点"name",一个 是 customer.name 而另一个是 customer.buyerinfo.shippingaddress.name 命名会造成问题 使用 getElementsByTagName "name" 标签来获取值。
-
与第一个相同,但如何获取 saletaxamount 节点数据值?
请帮忙。谢谢!
【问题讨论】:
-
1.您的代码中没有
???。任何你为什么要制作如此邪恶的代码组合?从 XML 中提取您的值 THEN 构建您的查询。像这样将它们混合在一起会导致完全无法阅读的无用混乱。 -
@Marc B. 感谢您的友好反馈。我的意思是说 ”???”在我的插入语句中。向您学习“完全无法阅读的无用混乱”。哇!谢谢你。
标签: php mysql xml mysql-real-escape-string xmldom