dpoh61610 2018-01-03 19:52 采纳率: 100%
浏览 844
已采纳

if条件检查XPath属性是否存在

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?

  • 写回答

1条回答 默认 最新

  • douli2063 2018-01-03 20:19
    关注

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站