Loop through an XML object with SimpleXML

前端 未结 2 470
抹茶落季
抹茶落季 2020-11-29 11:42

I am trying to use SimpleXML in PHP to loop through a XML object - the object format is below:-

I get the following error when I try to get the element tags by name

2条回答
  •  时光说笑
    2020-11-29 11:59

    SimpleXML doesn't have a getElementsByTagName() method (DOMDocument does).

    In SimpleXML, the object (e.g $xml) is treated as the root element. So you can loop through the product items like so:

    $xml = simplexml_load_string($xmlString);
    foreach($xml->products->item as $item)
    {
        echo (string)$item->product_id;
        echo (string)$item->model;
    }
    

    Example of building a devices associative array:

    $devices = array();
    
    $xml = simplexml_load_string($xmlString);
    foreach($xml->products->item as $item)
    {
       $device = array();
    
       foreach($item as $key => $value)
       {
            $device[(string)$key] = (string)$value;
       }
    
       $devices[] = $device;
    }
    
    print_r($devices);
    

    Outputs:

    Array
    (
        [0] => Array
            (
                [product_id] => 32417
                [manufacturer] => Alcatel
                [model] => Sparq 2
                [deeplink] => http://www.mysite.com/sc_offer?gid=32417
                [thumbnail_URL] => http://www.mysite.com/images/devices/thumbs/Alcatel-Sparq-II.jpg
                [image_URL] => http://www.mysite.com/images/devices/Alcatel-Sparq-II.jpg
                [price_not_working] => 0.00
                [price_poor] => 0.00
                [price_fair] => 20.00
                [price_good] => 25.00
                [price_perfect] => 25.00
                [price_new] => 25.00
                [battery_new] => 1.00
                [battery_perfect] => 1.00
                [battery_good] => 1.00
                [battery_fair] => 1.00
                [battery_poor] => 0.00
                [charger_new] => 1.00
                [charger_perfect] => 1.00
                [charger_good] => 1.00
                [charger_fair] => 1.00
                [charger_poor] => 0.00
                [packaging_new] => 1.00
                [packaging_perfect] => 1.00
                [packaging_good] => 1.00
                [packaging_fair] => 1.00
                [packaging_poor] => 0.00
            )
    
        [1] => Array
            (
                [product_id] => 31303
                [manufacturer] => Apple
                [model] => iPhone 3G 8gb
                [deeplink] => http://www.mysite.com/sc_offer?gid=31303
                [thumbnail_URL] => http://www.mysite.com/images/devices/thumbs/iPhone 8 3G.jpg
                [image_URL] => http://www.mysite.com/images/devices/iPhone 8 3G.jpg
                [price_not_working] => 0.00
                [price_poor] => 0.00
                [price_fair] => 7.00
                [price_good] => 2.00
                [price_perfect] => 2.00
                [price_new] => 2.00
                [battery_new] => 1.00
                [battery_perfect] => 1.00
                [battery_good] => 1.00
                [battery_fair] => 1.00
                [battery_poor] => 0.00
                [charger_new] => 1.00
                [charger_perfect] => 1.00
                [charger_good] => 1.00
                [charger_fair] => 1.00
                [charger_poor] => 0.00
                [packaging_new] => 1.00
                [packaging_perfect] => 1.00
                [packaging_good] => 1.00
                [packaging_fair] => 1.00
                [packaging_poor] => 0.00
            )
    
    )
    

提交回复
热议问题