XML парсер файла с ошибками

voodoo911
На сайте с 11.03.2008
Offline
157
499

Подскажите, есть XML rss ка , которая генерится с ошибками ( спецсимволы не конвертируются), тоесть выдается & вместо & и т.д. Стандартные XML парсеры PHP типа Simple XML не могут запарсить данный файл и выдают сообщение об ошибках. Можно ли как-то переконвертить его в нормальный формат? Пока вижу только вариант замены через регулярку отдельных символов, но помоему это не очень хорошее решение.

Спасибо за советы заранее.

Пример проверки рсс

http://validator.w3.org/feed/check.cgi?url=http://www.warriorplus.com/wso/rss/

T
На сайте с 20.03.2007
Offline
67
Toy
#1

Семантика не нарушена? Могу посоветовать http://htmlpurifier.org/. Думаю, XML он вполне съест.

A
На сайте с 29.12.2007
Offline
68
#2

Используй Tidy - вроде с xml работает...

aktuba добавил 13.06.2011 в 21:39

Toy:
Семантика не нарушена? Могу посоветовать http://htmlpurifier.org/. Думаю, XML он вполне съест.

Насколько помню, htmlpurifier вообще для другого и работает именно с html-тегами.

C
На сайте с 20.05.2011
Offline
14
#3

когда имеется возможность, можно прогонять через Tidy, когда нет, можно попробовать пляски с DomDocument::loadHTMLFile, ну и регулярки, если нет другого выхода

T
На сайте с 20.03.2007
Offline
67
Toy
#4
Насколько помню, htmlpurifier вообще для другого и работает именно с html-тегами.

Я бы попробовал ему скормить XML как фрагмент HTML, и добавить нужные элементы в исключение. В него кстати Tidy встроен.

F
На сайте с 06.06.2008
Offline
51
#5

5 минут и вопрос решен.

Ваша проблема вот где:

description><![CDATA[ Discover theSECRETS to building MASSIVE, RESPONSIVE LISTS!Where 1 Emailcan have your subscribersBEGGING YOU toHANDOVER THEIR CASH!Dear Fellow WarriorHave you been struggling to build a responsive mailing list, but all you keep hearing is �TheMONEY is in the LIST�?I know the feeling.But you know what...I kept at it for 2 years before I got anywhereI... ]]></description>

Символы � вводят SimpleXML в ступор.

Расступорить его проще простого.

Лекарство в студии (протестировано ;) ):

$xml = 'http://www.warriorplus.com/wso/rss/';

//получаем содержимое RSS лент в виде одной строки
$xml = @file_get_contents($xml);
// а это чтобы убить все, что имеет кодировку отличную от UTF-8
$xml = iconv ("windows-1251", "utf-8",$xml);
// производим парсинг
$xml = simplexml_load_string($xml);
// тестируем
print_r ($xml);

Занавес 🍿

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий