Reputation: 913
I have an xml file that is constructed like this
<listing ItemID="12345679" SKU="ABC123" Price="99.99" />
I have a for loop
inside a foreach loop
for ($i = 0; $i < $itemidcount; $i++) {
$xpath = $xml->xpath('/sitename/listing[@ItemID=' . '"' . $itemid[$i] .'"' . ']');
$prices[] = (string)$xpath[0]->attributes()->Price;
}
My issue is, if the ItemID
attribute
does not exist in the for loop
, it outputs an error and stops my script.
Notice: Undefined offset: 0 in /home/sitename/public_html/feeds/script.php on line 137
Fatal error: Uncaught Error: Call to a member function attributes() on null in /home/sitename/public_html/feeds/script.php:137 Stack trace: #0 {main} thrown in /home/sitename/public_html/feeds/script.php on line 137
I've tried doing a count
$count = count((string)$xpath[0]->attributes()->Price);
and wrapping it in $prices[]
if ($count > 0) {
$prices[] = (string)$xpath[0]->attributes()->Price;
}
But the same error occurs.
How can I create an if
that will skip over the $prices[]
line if the ItemID
Attribute
is not found?
Upvotes: 0
Views: 930
Reputation: 57131
You need to check the number of elements returned from the XPath call. So
$xpath = $xml->xpath('/sitename/listing[@ItemID=' . '"' . $itemid[$i] .'"' . ']');
if (count($xpath) > 0) {
$prices[] = (string)$xpath[0]->attributes()->Price;
}
Upvotes: 1