打开和结束标签不匹配&标签rss中数据的过早结束

时间:2012-03-15 16:22:51

标签: php rss xml-parsing

我正在尝试从此链接http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss解析RSS Feed 但是当我尝试显示结果时,它会给我以下错误:

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

以及

警告:DOMDocument :: load()[domdocument.load]:http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss中标记rss第2行中的数据过早结束,C:\ wamp \ www \ gazetaExpress \ scripts \ reader中的第226行。第17行的PHP

我用于解析的脚本是

 $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不起作用。有没有办法解决这个问题?任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:8)

这是由于使用<br>和其他自闭标签。 dom试图找到像<br/>这样的结尾,其中<br开始,/>结束。现代浏览器不会出现<tag>的问题,但php dom函数仍然希望您保留XML标准,因此您需要找到<singletags>并将其替换为<singletags />然后它才能正常工作细

答案 1 :(得分:5)

当您要解析的片段不符合XML规范时(例如,没有'/'或未闭合标签的自闭标签),如果它不包含重复ID,您可以尝试使用 loadHTML ,它更宽容。

$xmlDoc->loadHTML($xml);