Massive
Massive

Reputation: 5

Trying to get a specific value from XML attribute

Trying to scrape an IKEA page at the following link:

http://www.ikea.com/it/it/catalog/products/60255550/?type=xml&dataset=prices

I want to scrape the price of the item, but in the xml file the price appears once unformatted and once with the Euro sign next to it. I wish to scrape the priceNormal unformatted value specifically.

<prices>
<normal>
<priceNormal unformatted="44.99">€ 44,99</priceNormal>
<pricePrevious/>
<priceNormalPerUnit/>
<pricePreviousPerUnit/>
</normal>

My code below doesn't echo the price at all, not sure where I'm going wrong :(

$string = 'http://www.ikea.com/it/it/catalog/products/60255550/?type=xml&dataset=prices';

$xml=simplexml_load_file($string) or die("Error: Cannot create object");
//print_r($xml);

echo $xml->product->prices;

Upvotes: 0

Views: 81

Answers (2)

Scuzzy
Scuzzy

Reputation: 12322

You should be able to get the price with

$xml->products->product->items->item->prices->normal->priceNormal
$xml->products->product->items->item->prices->normal->priceNormal->attributes()->unformatted

If you however need to iterate of a result set, you can break up the places where you are expecting multiples with iteration...

foreach( $xml->products->product as $product )
{
  echo $product->name;
  foreach( $product->items->item as $item )
  {
    echo $item->name;
    echo $item->prices->normal->priceNormal;
    echo $item->prices->normal->priceNormal->attributes()->unformatted;
  }
}

Upvotes: 1

miken32
miken32

Reputation: 42676

Try using var_dump() instead of print_r() to look at the value of $xml. It's a bit convoluted, but you'll find the data you're looking for at this location:

$xml->products[0]->product->items[0]->item->prices->normal->priceNormal[0];

Upvotes: 1

Related Questions