使用PHP脚本解析RSS时出现问题

时间:2011-06-29 10:18:00

标签: php rss xml-parsing

我使用一个非常常见的PHP脚本来解析RSS;

function getRSS($source,$quien) {
    $start = microtime(true);
    ini_set('default_socket_timeout', 1);
    global $arrFeeds, $downItems, $time_taken;
    $arrFeeds = array();
    $ch = curl_init($source);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $content = curl_exec($ch);
    curl_close($ch);
    $doc = new DOMDocument();
    $doc->loadXML($content);
    foreach ($doc->getElementsByTagName('item') as $node) {
        $itemRSS = array ( 
            'title' => sistema($node->getElementsByTagName('title')->item(0)->nodeValue),
            'desc' => sistema($node->getElementsByTagName('description')->item(0)->nodeValue),
            'link' => $node->getElementsByTagName('link')->item(0)->nodeValue
        );
        echo(sistema($node->getElementsByTagName('title')->item(0)->nodeValue)."<br>");
        array_push($arrFeeds, $itemRSS);
        $downItems+=1;
    }
    $time_taken = microtime(true) - $start;
    if ($downItems>1) {$nu=mysql_query("UPDATE feeds SET lastcheck = NOW() WHERE id = '".$quien."';");}
}

当我使用来自Google的rss news feed测试此代码时,它工作得很好,但是如果我尝试使用此other rss feed,它就不会工作,并且会给出很多错误,例如: 警告:DOMDocument :: loadXML()[domdocument.loadxml]:打开和结束标记不匹配:实体中的P行5和BODY,C:\ Users \ Domingo \ Dropbox \ www \ temp \ parser中的行:6。第18行的PHP 。上面两个rss文件是有效的,我发现之间唯一不同的是其中一个有行:<?xml version="1.0" encoding="utf-8"?>而另一个没有。这是问题吗?我该如何解决这个问题?感谢您的帮助,请不要建议使用rss解析器库。

(*)更多错误,例如:Warning: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: BODY line 3 and HTML in Entity, line: 6 in C:\Users\Domingo\Dropbox\www\temp\parser.php on line 18Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag HTML line 1 in Entity, line: 7 in C:\Users\Domingo\Dropbox\www\temp\parser.php on line 18

1 个答案:

答案 0 :(得分:0)

第二个Feed本身看起来很好,不包含body或p标签。你可能正在混淆并加载错误的文件。