修复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
相关产品推荐
相关产品推荐

