Здравствуйте,дорогие форумчане!Скажите пожалуйста,как можно обработать XML-файл с ошибками.То есть не обработать эти ошибки в файле,а даже если они есть,то пройти мимо них и разобрать документ.Это возможно?
Спасибо.
Игорь_Vasinsky
8.09.2013 - 09:23
Цитата |
http://www.php.net/manual/ru/function.simplexml-load-file.php |
Цитата |
Ошибки ¶ Генерирует сообщение об ошибке уровня E_WARNING для каждой ошибки, найденной в XML-данных.
Подсказка Используйте функцию libxml_use_internal_errors() для того, чтобы подавить все ошибки XML, и функцию libxml_get_errors() для прохода по ним впоследствии. |
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinskyтак он хоть их и давит,но файл ведь не обрабатывает
sergeiss
8.09.2013 - 14:42
Такой файл я бы рассматривал как файл с новой структурой, не известной готовым обработчикам. И сделал бы свой собственный обработчик. А в нем уже предусмотрел бы всё, что надо.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата |
Такой файл я бы рассматривал как файл с новой структурой, не известной готовым обработчикам. И сделал бы свой собственный обработчик. А в нем уже предусмотрел бы всё, что надо. |
sergeiss,то есть использовать регулярные выражения,я правильно поняла?
Игорь_Vasinsky
9.09.2013 - 09:49
видимо
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
9.09.2013 - 13:35
Цитата (Эли4ка @ 9.09.2013 - 09:41) |
то есть использовать регулярные выражения,я правильно поняла? |
Если честно, то совсем не представляю
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
Может быть их, а может и не них. Надо по месту смотреть, что за нарушения в исходном файле.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
killer8080
9.09.2013 - 16:23
Цитата (Эли4ка @ 8.09.2013 - 06:26) |
Обработка ошибочного XML файла на php, Как обработать XML файл с ошибками |
А нужно ли его обрабатывать? Может лучше связаться с тех поддержкой сервиса, и сообщить им о проблеме?
Эли4ка
10.09.2013 - 05:32
Цитата |
Если честно, то совсем не представляю Может быть их, а может и не них. |
sergeiss,а что еще можно использовать для разбора данных кроме регулярных выражений?
Цитата |
А нужно ли его обрабатывать? Может лучше связаться с тех поддержкой сервиса, и сообщить им о проблеме? |
killer8080,обработать то бы желательно,но дело в том,что я у сервиса Спрашивай Ру(ссылку не привожу,она и так всем известна) никак тех.поддержку не могу найти,а если есть желание желание посмотреть XML-файл rss ленты,то адрес формируется как-то так:
sprashivai.ru/username/rss
P.S.код браузером не отображается по причине ошибок,поэтому можно только в исходных кодах посмотреть.
P.S.S.если кому лень печатать код,вот код:
set_time_limit(0);
$url = 'http://sprashivai.ru/svepi/rss';
$rss = simplexml_load_file($url);
print_r($rss);
sergeiss
10.09.2013 - 12:14
Цитата (Эли4ка @ 10.09.2013 - 05:32) |
а что еще можно использовать для разбора данных кроме регулярных выражений? |
Разборы файлов делали еще задолго до того, как появились регулярки
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
Можно же просто брать данные и анализировать.
Например, файл XML. Появился какой-то открывающий тэг. Записываешь у себя в переменных: тэг "такой-то" открыт. Потом еще открывающий, еще и еще. Затем на каком-то этапе должны появиться закрывающие тэги. И вдруг появился закрывающий тэг, не парный текущему открытому. Это - ошибка. Как поступить в такой ситуации - дело твое. Либо выдаешь ошибку и прекращаешь обработку, либо анализируешь дальше и пытаешься понять, в чем именно ошибка. Чтобы хотя бы неошибочные данные выбрать. А может быть, даже и восстановить их.
Между прочим, "ручной" разбор может оказаться даже быстрее, чем регулярками.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
killer8080
10.09.2013 - 13:15
$url = 'http://sprashivai.ru/svepi/rss';
$content = file_get_contents($url);
$content = strtr($content,
array(
' <?xml version=1.0 encoding=utf-8 ?>' => '<?xml version="1.0" encoding="utf-8"?>',
'<rss version=2.0>' => '<rss version="2.0">'
)
);
$content = preg_replace('#<\!\[CDATA\[(.*)\]\]>#isuU', '$1', $content);
$rss = simplexml_load_string($content);
echo '<pre>'.print_r($rss, 1).'</pre>';
но нет гарантий, что там не возникнут другие ошибки
Эли4ка
14.09.2013 - 09:46
Цитата |
Разборы файлов делали еще задолго до того, как появились регулярки Можно же просто брать данные и анализировать. |
sergeiss,вот меня очень долгое время мучил этот вопрос:как без регулярных выражений анализировать данные.как например без них создаются языки программирования,пробовала искать.но ответа не нашла ни в Google,ни в Яндексе,пробовала смотреть исходники PCRE,но мне не хватает знаний,чтобы разобраться с принципом работы,пробовала на форуме Си программистов спрашивать-ответа толкового так и не получила,если у Вас есть литература.или Вы знаете как это все делается,можете рассказать?
Цитата |
Например, файл XML. Появился какой-то открывающий тэг. Записываешь у себя в переменных: тэг "такой-то" открыт. Потом еще открывающий, еще и еще. Затем на каком-то этапе должны появиться закрывающие тэги. И вдруг появился закрывающий тэг, не парный текущему открытому. Это - ошибка. Как поступить в такой ситуации - дело твое. Либо выдаешь ошибку и прекращаешь обработку, либо анализируешь дальше и пытаешься понять, в чем именно ошибка. Чтобы хотя бы неошибочные данные выбрать. А может быть, даже и восстановить их. |
да,почти такой же алгоритм я сама придумала,только у меня ,опять же, не хватило знаний реализовать все это самой
Цитата |
Между прочим, "ручной" разбор может оказаться даже быстрее, чем регулярками. |
а что значит ручной?самой сидеть и разбирать?
killer8080ой спасибо большое-большое,Вы снова за меня все написали..
Цитата |
но нет гарантий, что там не возникнут другие ошибки |
верно,вдруг они поменяют вид rss-канала и опять переделывать..ладно буду по-другому данные доставать..
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.