繁体   English   中英

如何使用PHP从XML获取标签的属性?

[英]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']

http://php.net/manual/zh/simplexmlelement.attributes.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM