[英]How to get the attribute of a tag from XML using PHP?
我有以下XML和代码,试图将其保存在mySQL中。 它正在工作,但是我的问题是我无法获得产品ID属性。
SQLSTATE [23000]:违反完整性约束:1048列“ product_id”不能为空
<product id="1111845">
<name><![CDATA[MadBiker 600]]></name>
<link>http://demo.com/p.MadBiker-600.1111845.html</link>
<price_with_vat>107.01</price_with_vat>
...
...
...
</product>
这是代码
$xml = simplexml_load_file("demo.xml");
foreach($xml->products->product as $data) {
$sql = "INSERT INTO products (shop, product_id, name, price, shipping, manufacturer, stock, availability)
VALUES (:SHOP, :ID, :NAME, :PRICE, :SHIPPING, :MANUFACTURER, :STOCK, :AVAILABILITY)";
$stmt = $dbh->prepare($sql);
"ID" => $data->product[id] ,
"NAME" => $data->name,
"PRICE" => $data->price_with_vat,
这个怎么做?
您的foreach
循环已经遍历<product>
节点:
foreach ($xml->products->product as $data) {
//...
}
因此,在这种情况下, $data
已经表示<product>
并且您不想使用$data->product
。 然后,只需通过$data
本身上的数组键引用['id']
属性即可,因此:
"ID" => (string)$data['id']
(不要忘记将其转换为字符串-其他节点将需要通过(string)
进行相同的处理)
"NAME" => (string)$data->name,
"PRICE" => (string)$data->price_with_vat,
PHP没有显示其他警告的事实表明您没有display_errors
。 始终在开发代码时使用
error_reporting(E_ALL);
ini_set('display_errors', 1);
或在php.ini中设置它们。
尝试(int)$data->product['id']
,使用SimpleXML时需要转换属性。
而不是使用
$data->product['id'],
$data->name,
$data->price_with_vat,
采用
$data['product'][0]
$data['name']
$data['price_with_vat']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.