You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复PHP读取RSS时“Attempt to read property 'nodeValue' on null”警告

解决RSS条目无category字段导致的PHP警告问题

问题根源就是部分RSS条目没有<category>节点,当你调用item(0)时会返回null,直接访问null的nodeValue属性就会触发警告。可以通过先检查节点是否存在的方式解决,下面提供两种可行方案:

方案一:先获取节点再判断(兼容性好)

先单独取出category节点,判断它不为null后再取值,否则设为空字符串或你需要的默认值:

foreach ( $urlarray as $url ) {
  $rss->load( $url['url'] );
  foreach ( $rss->getElementsByTagName( 'item' ) as $node ) {
    // 先获取category节点
    $categoryNode = $node->getElementsByTagName( 'category' )->item( 0 );
    $item = array(
      'site'  => $url['name'],
      'title' => $node->getElementsByTagName( 'title' )->item( 0 )->nodeValue,
      'desc'  => $node->getElementsByTagName( 'description' )->item( 0 )->nodeValue,
      'link'  => $node->getElementsByTagName( 'link' )->item( 0 )->nodeValue,
      'date'  => $node->getElementsByTagName( 'pubDate' )->item( 0 )->nodeValue,   
      'category'  => $categoryNode ? $categoryNode->nodeValue : '',
    );
    array_push( $feed, $item );
  }
}

方案二:使用null安全运算符(PHP 7.4+)

如果你的PHP版本在7.4及以上,可以用?->(null安全运算符)简化代码,它会自动判断前面的节点是否为null,避免触发警告,再配合??设置默认值:

foreach ( $urlarray as $url ) {
  $rss->load( $url['url'] );
  foreach ( $rss->getElementsByTagName( 'item' ) as $node ) {
    $item = array(
      'site'  => $url['name'],
      'title' => $node->getElementsByTagName( 'title' )->item( 0 )->nodeValue,
      'desc'  => $node->getElementsByTagName( 'description' )->item( 0 )->nodeValue,
      'link'  => $node->getElementsByTagName( 'link' )->item( 0 )->nodeValue,
      'date'  => $node->getElementsByTagName( 'pubDate' )->item( 0 )->nodeValue,   
      'category'  => $node->getElementsByTagName( 'category' )->item(0)?->nodeValue ?? '',
    );
    array_push( $feed, $item );
  }
}

两种方案都能彻底消除警告,你可以根据自己的PHP环境选择合适的写法。

内容的提问来源于stack exchange,提问作者Johnny Bravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:36:06