[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработка ошибочного XML файла на php
Эли4ка
Здравствуйте,дорогие форумчане!Скажите пожалуйста,как можно обработать XML-файл с ошибками.То есть не обработать эти ошибки в файле,а даже если они есть,то пройти мимо них и разобрать документ.Это возможно?
Спасибо.
Игорь_Vasinsky
Цитата
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
Эли4ка
Игорь_Vasinsky
так он хоть их и давит,но файл ведь не обрабатывает sad.gif
sergeiss
Такой файл я бы рассматривал как файл с новой структурой, не известной готовым обработчикам. И сделал бы свой собственный обработчик. А в нем уже предусмотрел бы всё, что надо.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Эли4ка
Цитата
Такой файл я бы рассматривал как файл с новой структурой, не известной готовым обработчикам. И сделал бы свой собственный обработчик. А в нем уже предусмотрел бы всё, что надо.

sergeiss,то есть использовать регулярные выражения,я правильно поняла?
Игорь_Vasinsky
видимо

_____________
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
Цитата (Эли4ка @ 9.09.2013 - 09:41)
то есть использовать регулярные выражения,я правильно поняла?

Если честно, то совсем не представляю smile.gif Может быть их, а может и не них. Надо по месту смотреть, что за нарушения в исходном файле.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
Цитата (Эли4ка @ 8.09.2013 - 06:26)
 Обработка ошибочного XML файла на php, Как обработать XML файл с ошибками

А нужно ли его обрабатывать? Может лучше связаться с тех поддержкой сервиса, и сообщить им о проблеме?
Эли4ка
Цитата
Если честно, то совсем не представляю  Может быть их, а может и не них.

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
Цитата (Эли4ка @ 10.09.2013 - 05:32)
а что еще можно использовать для разбора данных кроме регулярных выражений?

Разборы файлов делали еще задолго до того, как появились регулярки smile.gif Можно же просто брать данные и анализировать.
Например, файл XML. Появился какой-то открывающий тэг. Записываешь у себя в переменных: тэг "такой-то" открыт. Потом еще открывающий, еще и еще. Затем на каком-то этапе должны появиться закрывающие тэги. И вдруг появился закрывающий тэг, не парный текущему открытому. Это - ошибка. Как поступить в такой ситуации - дело твое. Либо выдаешь ошибку и прекращаешь обработку, либо анализируешь дальше и пытаешься понять, в чем именно ошибка. Чтобы хотя бы неошибочные данные выбрать. А может быть, даже и восстановить их.

Между прочим, "ручной" разбор может оказаться даже быстрее, чем регулярками.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
$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ка
Цитата
Разборы файлов делали еще задолго до того, как появились регулярки  Можно же просто брать данные и анализировать.

sergeiss,вот меня очень долгое время мучил этот вопрос:как без регулярных выражений анализировать данные.как например без них создаются языки программирования,пробовала искать.но ответа не нашла ни в Google,ни в Яндексе,пробовала смотреть исходники PCRE,но мне не хватает знаний,чтобы разобраться с принципом работы,пробовала на форуме Си программистов спрашивать-ответа толкового так и не получила,если у Вас есть литература.или Вы знаете как это все делается,можете рассказать? rolleyes.gif
Цитата
Например, файл XML. Появился какой-то открывающий тэг. Записываешь у себя в переменных: тэг "такой-то" открыт. Потом еще открывающий, еще и еще. Затем на каком-то этапе должны появиться закрывающие тэги. И вдруг появился закрывающий тэг, не парный текущему открытому. Это - ошибка. Как поступить в такой ситуации - дело твое. Либо выдаешь ошибку и прекращаешь обработку, либо анализируешь дальше и пытаешься понять, в чем именно ошибка. Чтобы хотя бы неошибочные данные выбрать. А может быть, даже и восстановить их.

да,почти такой же алгоритм я сама придумала,только у меня ,опять же, не хватило знаний реализовать все это самой sad.gif
Цитата
Между прочим, "ручной" разбор может оказаться даже быстрее, чем регулярками.

а что значит ручной?самой сидеть и разбирать? huh.gif
killer8080
ой спасибо большое-большое,Вы снова за меня все написали.. rolleyes.gif
Цитата
но нет гарантий, что там не возникнут другие ошибки

верно,вдруг они поменяют вид rss-канала и опять переделывать..ладно буду по-другому данные доставать..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.