2012-03-15 57 views
6

我想从这个链接解析RSS提要http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss 但是当我尝试显示它给了我下面的错误结果:开幕和结束标记错配的标签RSS数据过早结束

警告:DOM文档:: load()[domdocument.load]:打开和结束标记不匹配:强行208和http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss中的描述,第207行的C:\ wamp \ www \ gazetaExpress \ scripts \ reader.php中的行209:

以及

警告:DOMDocument :: load()[domdocument.load]:数据提前结束在标签RSS线2 http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss,行:用C 226:\ WAMP \ WWW \ gazetaExpress \脚本\ reader.php上线17

,我使用解析脚本是

$xmlDoc->load($xml); 

$x=$xmlDoc->getElementsByTagName('item'); 

for ($i=0; $i<6; $i++) { 
    $item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; 
    $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue; 
    $item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue; 

// and echo statements 

} 

当我尝试从本网站尝试其他RSS源时(例如运动:http://www.gazetaexpress.com/rss.php?cid=1,24&part=rss),它可以正常工作。正是上面的rss feed不起作用。有什么办法可以解决这个问题吗?任何帮助将非常感激。

+1

错误在于饲料本身的构建/创作。没有什么可以真正做到的(除非你是提要的作者)。 – 2012-03-15 16:26:55

+0

最好的方法是联系该网站并通知他们他们的RSS源已损坏。 Opera提供此错误: XML解析失败 XML解析失败:语法错误(行:209,字符:159) 错误:不匹配的结束标记 – h00ligan 2012-03-15 16:28:01

回答

6

这是由于使用了<br>和其他自闭标签。 dom试图找到像这样的结尾<br/>,其中<br开始,/>结束。现在的浏览器不会出现<tag>的问题,但是php dom函数仍然希望你保留XML标准,所以你需要找到<singletags>这个al,并用<singletags />代替它们,这比它工作得很好。

4

当您想要解析的片段不符合XML规范(例如,不使用'/'或未封闭标签的自闭标签),并且如果它不包含重复的ID,您可以尝试使用它,这更容易。

$xmlDoc->loadHTML($xml);