开头和结尾标签不匹配以及标签rss中数据的过早结束

Shp*_*pat 9 php rss xml-parsing

我正在尝试从这个链接解析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中的209

以及

警告:DOM文档::负载()[domdocument.load]:在标签RSS线2数据过早结束http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss,线:226中第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

}
Run Code Online (Sandbox Code Playgroud)

当我从这个网站尝试一些其他RSS提要时(比如运动:http://www.gazetaexpress.com/rss.php?cid = 1,24&part = rss ),它运行正常.正是上面的rss feed不起作用.有没有办法解决这个问题?任何帮助将非常感激.

bot*_*wer 8

这是由于使用<br>和其他自闭标签.dom试图找到这样的结局<br/>,<br从哪里开始并/>结束.现代浏览器不会有问题<tag>但是php dom功能仍然希望你保持XML标准,所以你需要找到它<singletags>并替换它们<singletags />然后它工作得很好.


jeu*_*eum 5

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

$xmlDoc->loadHTML($xml);
Run Code Online (Sandbox Code Playgroud)