Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Opening and ending tag mismatch & Premature end of data in tag rss

I'm trying to parse RSS feed from this link http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss but when i try displaying the results it gives me the following error:

Warning: DOMDocument::load() [domdocument.load]: Opening and ending tag mismatch: strong line 208 and description in http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss, line: 209 in C:\wamp\www\gazetaExpress\scripts\reader.php on line 17

as well as

Warning: DOMDocument::load() [domdocument.load]: Premature end of data in tag rss line 2 in http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss, line: 226 in C:\wamp\www\gazetaExpress\scripts\reader.php on line 17

the script that i'm using for parsing is

 $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

}

When I try some other rss feed from this site (like sports: http://www.gazetaexpress.com/rss.php?cid=1,24&part=rss), it works fine. It's exactly the above rss feed that won't work. Is there any way to get around this? any help would be hugely appreciated.

like image 788
Shpat Avatar asked Mar 15 '12 16:03

Shpat


2 Answers

When the fragment you want to parse is not conform to XML specs (eg self closing tags without '/' or unclosed tags) and if it dosesn't contain duplicate ids you can try with loadHTML, it's more permissive.

$xmlDoc->loadHTML($xml);
like image 129
jeum Avatar answered Nov 17 '22 22:11

jeum


This is due to the usage of <br> and other self closing tags. The dom tries to find the end like this <br/> where <br is start and /> is end. Modern browsers will not have problems with <tag> but the php dom function still wants you to keep the XML standard so you need to find al the <singletags> and replace them with <singletags /> then it works just fine.

like image 21
botenvouwer Avatar answered Nov 17 '22 22:11

botenvouwer