标签不匹配的开头和结尾 & 标签rss中数据提前结束

10

我正在尝试解析这个链接的RSS订阅源:http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss,但是在尝试显示结果时,它给出以下错误:

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

以及

警告:DOMDocument :: load()[domdocument.load]:标记rss第2行数据过早结束,位于http: //www.gazetaexpress.com/rss.php?cid=1,13&part=rss ,行:17上的C:\ wamp \ www \ gazetaExpress \ scripts \ reader.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提要无法工作。有没有什么办法可以解决这个问题?非常感谢您的帮助。


1
错误出在订阅本身的构建/作者方面。关于此你没什么可以做的(除非你是订阅的作者)。 - Brian Driscoll
最好的方法是联系该网站并告知他们他们的 RSS 源已损坏。 Opera 给出了以下错误提示: XML 解析失败 XML 解析失败:语法错误(行:209,字符:159) 错误:不匹配的结束标记。 - h00ligan
2个回答

9
这是由于使用了 <br> 和其他自闭合标签所致。DOM 试图像这样找到结束符号 <br/>,其中 <br 是开始,/> 是结束。现代浏览器不会对 <tag> 产生问题,但 PHP DOM 函数仍然要求您保持 XML 标准,因此您需要找到所有的 <singletags> 并将它们替换为 <singletags />,然后它就能正常工作了。

7

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

$xmlDoc->loadHTML($xml);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接