使用php检查xml中是否存在节点

时间:2011-10-30 19:30:05

标签: php xml foreach amazon

我正在阅读一些从亚马逊的api回来的xml。大多数情况下,亚马逊在其xml中提供了类似产品的列表,但并非总是如此。如果有类似的产品,我会将它们作为一组链接回应。问题是并非所有产品都在xml中都有类似的产品。我想更改此代码,以便它首先检查是否存在类似的产品节点,然后是否继续将它们作为链接呈现出来,如果不是,它就什么也不做。如果xml中没有类似的产品,则下面的代码会出现以下错误消息:

Warning: Invalid argument supplied for foreach() in /public_html/product.php on line 26

如果从亚马逊返回的xml中没有类似的产品节点。

提前致谢。

foreach ($result->Items->Item->SimilarProducts->SimilarProduct as $SimilarProduct) {
echo "<li><a href=\"product.php?prod=" . $SimilarProduct->ASIN . "\">" . $SimilarProduct->Title . "</a></li/> \n";
}

1 个答案:

答案 0 :(得分:0)

您可以在foreach之前进行此测试(注意if ):

if ($result->Items->Item->SimilarProducts->SimilarProduct !== null)
{
   foreach ($result->Items->Item->SimilarProducts->SimilarProduct as $SimilarProduct) {
      echo "<li><a href=\"product.php?prod=" . $SimilarProduct->ASIN . "\">" . $SimilarProduct->Title . "</a></li/> \n";
   }
}

无论如何,如果在'SimilarProduct'之前没有错误或空值,则此测试有效(例如,如果'Item'为空,则脚本无论如何都会失败)。

注意:我建议你不要这样做,我的意思是重复访问vars(即 - &gt; ...-&gt; ...-&gt;),因为你将对情况以及正在发生的事情控制不力。