我检查了很多问题,但没有找到解决问题的答案。我有很多xml/rss地址需要在mysqldb中解析。它在大多数xml地址上运行良好。但有时,一些地址会产生这样的错误。
致命错误:在中的非对象上调用成员函数项()。。。在线61
行是这样的:
$item_title=$x->item($n)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
完整代码:
$url = array(
"http://www.example.com/rss",
.... /*This url is from database*/
"http://www.example.com/rss",
);
$q = 0;
for($j=0;$j<count($url);++$j){
$xmlDoc = new DOMDocument();
$xmlDoc->load($url[$j]);
//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
$x=$xmlDoc->getElementsByTagName('item');
for ( $n = 0 ; $n < $x->length ; ++$n ){
/* this line have a problem */
$item_title=$x->item($n)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($n)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($n)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
$query[$q]['xml'] = $url[$j];
$query[$q]['post_title'] = $item_title;
$query[$q]['field'] = "xml";
$query[$q]['id'] = $item_link;
$query[$q]['description'] = $item_desc;
++$q;
}
}
foreach( $query as $section => $item )
foreach( $item as $key => $value )
echo "$section:'t$key't: $value<br>";
我该如何解决?
不能期望所有<title>
、<link>
和<description>
都在每个<item>
中。根据RSS规范:
项目的所有元素都是可选的,但必须至少有一个标题或说明。