Несоответствие открытия и окончания тега и преждевременное завершение данных в теге rss - PullRequest
9 голосов
/ 15 марта 2012

Я пытаюсь разобрать канал 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,: 209 в C: \ wamp \ www \ gazetaExpress \ scripts \ reader.php в строке 17

а также

Предупреждение: DOMDocument :: load () [domdocument.load]: преждевременное завершение данных в строке тега rss 2 в строке http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss,: 226 в C: \ wamp \ www \ gazetaExpress \ scripts \ 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-канал, который не будет работать. Есть ли способ обойти это? Любая помощь будет очень признателен.

Ответы [ 2 ]

8 голосов
/ 17 октября 2012

Это связано с использованием <br> и других самозакрывающихся тегов.Дом пытается найти конец, подобный этому <br/>, где <br - начало, а /> - конец.Современные браузеры не будут иметь проблем с <tag>, но функция php dom все еще хочет, чтобы вы сохранили стандарт XML, поэтому вам нужно найти все <singletags> и заменить их на <singletags />, тогда все будет работать нормально.

5 голосов
/ 18 марта 2014

Когда фрагмент, который вы хотите проанализировать, не соответствует спецификациям XML (например, самозакрывающиеся теги без '/' или незакрытых тегов), и если он не содержит повторяющихся идентификаторов, вы можете попробовать loadHTML ,это более разрешительно.

$xmlDoc->loadHTML($xml);
...