Создать форум бесплатно: ixbb.ru :: Календарь на Апрель 2024 года: calendar2008.ru/2024/aprel/

Страницы: (3) [1] 2 3  ( Перейти к первому непрочитанному сообщению ) Reply to this topicStart new topicStart Poll

Погогите! Парсинг XML в PHP не пашет(

meta-trader
  Отправлено: May 3 2011, 09:40 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Нужно организовать парсинг XML в PHP с последующим выводом инфы.

В поисках ответа на вопрос "как подобное сотворить?" нашёл статейку _http://grigorieff.ru/?p=183

Всё просто и понятно. Но не работает второй метод (в денвере проверял) sad.gif
Первый вариант не проверял... Сложноватый он, щас посмотрю, но второй метод проще и интересней)

Вот мой код:

CODE

$url = 'http://support.liveforums.ru/export.php?type=xml&max=10';       //адрес XML документа

$xml= simplexml_load_file($url);       //Интерпретирует XML-документ в объект

//Выводим XML на печать
foreach ($xml->channel->item as $item) {
       echo $item->title;       //выводим на печать название темы
       echo $item->link;        //выводим на печать ссылку
       echo $item->content;     //выводим на печать текст сообщения
       echo $item->author;      //выводим на печать автора последнего сообщения
       echo $item->posted;      //выводим на печать дату сообщения
}


Пишет ошибку:
QUOTE
Warning: Invalid argument supplied for foreach() in Z:\home\LiveRolka2011.ru\www\this_forum.php on line 171


Помогите!!! ah.gif


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
Матроскин
Отправлено: May 3 2011, 09:49 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Где-то на форуме уже была подобная тема и я там выкладывал свой код для работы с xml.
Выложи код файла xml - попробуем помочь wink.gif


--------------------
PMEmail PosterUsers Website
Top
meta-trader
Отправлено: May 3 2011, 10:44 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



В коде ссылка на файл же есть!

QUOTE
http://support.liveforums.ru/export.php?type=xml&max=10


Вот его содержимое:
CODE
<?xml version="1.0" encoding="windows-1251"?>
<source>
<url>http://support.liveforums.ru/</url>
<topic id="64">
 <title>Расширение функций форумов: полезные скрипты</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4042#p4042</link>
 <content>Большое спасибо,теперь работает то что доктор прописал!</content>
 <author>1lex</author>

 <posted>Mon, 02 May 2011 12:55:56 +0400</posted>
</topic>
<topic id="158">
 <title>Награды</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4041#p4041</link>
 <content>я там так написал
2 =Награды


&quot;</content>
 <author>тимур</author>

 <posted>Sun, 01 May 2011 18:06:45 +0400</posted>
</topic>
<topic id="790">
 <title>Новшество на сервисах - система приглашений</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4040#p4040</link>
 <content>Уважаемые пользователи!
Представляем вашему вниманию введенную систему приглашений на форумах.

У каждого пользователя есть собственная ссылка для приглашения людей на форум.
В профиле пользователя есть возможность разослать приглашения выбранным контактам из адресной книги своего почтового ящика!
Человек, пришедший по такой ссылке и зарегистрировавшийся на форуме, автоматически записывается в число приглашенных пользователем.

Информация о числе приглашенных со ссылкой на список этих пользователей может располагаться под аватаром пользователя в сообщениях и его профиле.
На странице подробной статистики отображен список из 10 самых приглашающих участников форума.

На странице списка участников форума возможна сортировка по числу приглашений.

Появилась возможность создавать закрытые форумы, когда для регистрации требуется ввести код приглашения от одного из участников форума.


При этом можно ограничить количество использования приглашений одного пользователя.




Попробуйте новую функцию форумов. Сообщайте об ошибках в ЛС.</content>
 <author>Босс ЖивыеФорумы.ру</author>

 <posted>Sun, 01 May 2011 07:52:04 +0400</posted>
</topic>
<topic id="788">
 <title>Не могу зайти на форум!!!</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4036#p4036</link>
 <content>Понял. Спасибо.</content>
 <author>лёха</author>

 <posted>Sat, 30 Apr 2011 22:21:53 +0400</posted>
</topic>
<topic id="769">
 <title>заказ изайна покемон</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4030#p4030</link>
 <content>переделаю заказ
1. Название вашего форума:
мир покемонов
2. Тематика форума:
ролевая игра по аниме покемоны
3. Адрес вашего форума:
http://pokeworld.liverolka.ru
4. Ваш ник и должность на форуме:
kiko-администратор
5. Исходники (картинки, над которыми дизайнер будет работать):
фон - ссылка- http://s013.radikal.ru/i325/1103/0e/ecd988bb23bd.jpg
шапка - ссылка- http://dimitraki.info/news/forum/uploads/5450_12.gif
название форума- на картинке - ссылка- http://s61.radikal.ru/i171/1104/09/3d01c877b332.png
иконки - новое сообщение http://s011.radikal.ru/i317/1104/33/ae4ec41197c3.gif
      нет новых сообщений http://www.gtsplus.net/files/images/sprites/plat2fn/025f.png
      важно http://www.gtsplus.net/files/images/sprites/emerald/243.gif
      удаленная тема http://s004.radikal.ru/i208/1104/a9/afc27468e177.png
      перенесенная тема http://www.gtsplus.net/files/images/sprites/hgss1fn/063.png
6. Пожелания:
я тут примерно набрасал как выглядеть должно, получилось так

но еще мне охото чтоб показывало посетителей за сутки и между категориями было хоть чуть чуть растояния
зарание спасибо</content>
 <author>тимур</author>

 <posted>Fri, 29 Apr 2011 21:55:35 +0400</posted>
</topic>
<topic id="789">
 <title>свой fivicon</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4029#p4029</link>
 <content>О, нашёл случайно ответ на свой вопрос в скриптах)</content>
 <author>AHTUxPK</author>

 <posted>Fri, 29 Apr 2011 16:19:13 +0400</posted>
</topic>
<topic id="779">
 <title>Пожалуйста, подскажите возможность установить на Форум Ленту Рецензий.</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4022#p4022</link>
 <content>Всем привет. http://ryibalka.liveforums.ru/ Не могу зайти на форум. Пишет вот что:
Из-за чего это может быть, и что мне делать при повторных таких заморочках?... Заранее спасибо!</content>
 <author>лёха</author>

 <posted>Thu, 28 Apr 2011 10:47:23 +0400</posted>
</topic>
<topic id="787">
 <title>форум не работает ошибка 404</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4021#p4021</link>
 <content>За нарушение правил сервиса http://liveforums.ru/agreement/ форум был удалён.</content>
 <author>Босс ЖивыеФорумы.ру</author>

 <posted>Wed, 27 Apr 2011 17:28:04 +0400</posted>
</topic>
<topic id="712">
 <title>Картинки на любые темы...</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4019#p4019</link>
 <content>:)</content>
 <author>Босс ЖивыеФорумы.ру</author>

 <posted>Sun, 24 Apr 2011 22:17:48 +0400</posted>
</topic>
<topic id="786">
 <title>Новые возможности - новые поля профиля</title>
 <link>http://support.liveforums.ru/viewtopic.php?pid=4018#p4018</link>
 <content>Уважаемые пользователи!
Рад сообщить о значительных изменениях в работе с полями профиля.
Благодаря последним изменениям стало возможным провести гибкую настройку и сделать отображение профилей более соответствующим тематике форума.
К вашему пользованию появились следующие возможности.
1. Сортировка полей. Возможность задать порядок расположения полей профиля под аватаром пользователя в сообщениях, простым перетаскиваем в админке.
2. Сокрытие любого из базовых полей профиля.

3. Как известно, раньше были только текстовые поля. Теперь существует 5 типов полей для самых разных задач:
Текстовое поле
Многострочное поле
Раскрывающийся список


Переключатели (выбор одного значения).

Флажки (выбор множества значений).

4. Поясняющий текст. Для каждого создаваемого вами поля вы можете написать поясняющий текст, как подсказку для пользователя.
5. В качестве значений для переключателей и флажков вы можете указывать адреса картинок.


6. Возможность сделать поле обязательным для заполнения.
7. Результат выглядит так.

8. В том случае, если 5 полей профиля вам окажется недостаточно, у вас есть возможность приобрести дополнительные поля за кредиты.</content>
 <author>Босс ЖивыеФорумы.ру</author>

 <posted>Sun, 24 Apr 2011 22:14:13 +0400</posted>
</topic>
</source>


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
meta-trader
Отправлено: May 3 2011, 10:48 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Проблема тут скорей всего не в файле xml, функция ругается на аргумент. Мне тока не понятно что делать.


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
Матроскин
Отправлено: May 3 2011, 11:15 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Проблема тут и в коде, и в файле. Во-первых, откуда в этой строке:
CODE
foreach ($xml->channel->item as $item)

взялся указатель на элемент DOM channel, если такого элемента в файле xml нет?
Правильно в этой строке будет так:
CODE
foreach ($xml->topic as $item)

поскольку все остальные элементы, к которым затем происходит обращение (title, link, content, author, posted), заключены именно в такой родительский элемент.
Попробуй заменить эту строку - и все будет почти ок... почти потому, что есть вторая проблема - кодировка файла. XML должен быть в юникоде, а не в кириллической кодировке... не знаю даже - зачем сохранять XML в кириллице? dry.gif
В общем, с таким кодом будет все ок:
CODE
<?php
header('Content-type: text/html; charset=utf-8');
$url = 'http://support.liveforums.ru/export.php?type=xml&max=10';       //адрес XML документа

$xml= simplexml_load_file($url);       //Интерпретирует XML-документ в объект

/*echo '<pre>';
print_r($xml);
echo '</pre>';*/

//Выводим XML на печать
foreach ($xml->topic as $item) {
      echo $item->title .'<br />';       //выводим на печать название темы
      echo $item->link .'<br />';        //выводим на печать ссылку
      echo $item->content .'<br />';     //выводим на печать текст сообщения
      echo $item->author .'<br />';      //выводим на печать автора последнего сообщения
      echo $item->posted .'<br /><hr />';      //выводим на печать дату сообщения
}
?>


--------------------
PMEmail PosterUsers Website
Top
meta-trader
Отправлено: May 3 2011, 02:10 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Спасибо! wink.gif

channel был в коде, который в статье... smile.gif


Сейчас выдаёт ошибку:
QUOTE
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\LiveRolka2011.ru\www\this_forum.php:12) in Z:\home\LiveRolka2011.ru\www\this_forum.php on line 137

Т.е. ругается на смену хеадера. Но затем выводит содержимое xml. part.gif

Может убрать смену хеадера? unsure.gif


QUOTE
не знаю даже - зачем сохранять XML в кириллице?

Ну так в движке форума реализовано...


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
Матроскин
Отправлено: May 3 2011, 02:52 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Пожалуйста smile.gif
Эта ошибка возникает тогда, когда выводится что-то в браузер ДО отправки заголовков, т.е., перед функцией header() не должно быть вывода в браузер, даже пробела. Очень часто такая ошибка возникает тогда, когда файл сохранен в кодировке utf-8 (правильно в utf-8 without BOM). Хедер можно убрать, но тогда, скорее всего, будет нечитаема кириллица из XML.
В общем, помещай хедер в самом верху документа и сам документ сохраняй либо в utf-8 without BOM, либо в windows-1251.


--------------------
PMEmail PosterUsers Website
Top
meta-trader
Отправлено: May 3 2011, 03:29 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Да, до функции header() есть код.
Но без неё всё нормально читается.
Сама страница в utf-8, а вот xml в windows-1251.

А кстати как можно парсить html-код?
Передо мной сейчас такая задача - из некоторых тегов получить содержимое. В инете нашёл про библиотеку HTML DOM, но разобраться не просто...


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
meta-trader
  Отправлено: May 3 2011, 06:25 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Возращаемся к сабжу sad.gif

В денвере работает на ура. На хостинге ошибки:

QUOTE
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: http://support.liveforums.ru/export.php?ty...l&max=10:1: parser error : Document is empty in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]:  in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: ^ in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: http://support.liveforums.ru/export.php?ty...l&max=10:1: parser error : Start tag expected, '&lt;' not found in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]:  in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: ^ in /home3/megapro/public_html/test/this_forum.php on line 139
[03-May-2011 20:55:36] PHP Warning:  Invalid argument supplied for foreach() in /home3/megapro/public_html/test/this_forum.php on line 142


Код таков:
CODE

// header('Content-type: text/html; charset=utf-8'); - эта функция в самом верху страны указана
$url = "http://$adress/export.php?type=xml&max=10";       //адрес XML документа

$xml= simplexml_load_file($url);       //Интерпретирует XML-документ в объект

//Выводим XML на печать
foreach ($xml->topic as $item) {
     $title_topic=$item->title;       //выводим на печать название темы
     $link_topic=$item->link;         //выводим на печать ссылку
     $post=$item->content;            //выводим на печать текст сообщения
     $author_post=$item->author;      //выводим на печать автора последнего сообщения
     $time_post=$item->posted;        //выводим на печать дату сообщения
     echo "<div style=\"width: 100%;\"><a href=\"click_http.php?url=$link_topic\" target=\"_blank\">$title_topic</a><br /><b>Последнее сообщение</b> от <u>$author_post</u> в <u>$time_post</u><br /><b>Текст:</b> $post<br /><br /></div>";      
}


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
Матроскин
Отправлено: May 4 2011, 10:03 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Это уже вопрос больше к хостеру - по какой-то причине не хочет загружаться внешний файл, о чем свидетельствует текст ошибки:
QUOTE
parser error : Document is empty

т.е., полученный документ пуст. Специально выложил код в сеть - все отлично работает - смотреть
Попробуй еще такой вариант:
CODE
<?php
header('Content-type: text/html; charset=utf-8'); //- эта функция в самом верху страны указана
$adress = 'support.liveforums.ru';
$url = "http://$adress/export.php?type=xml&max=10";       //адрес XML документа

$read = file_get_contents($url);

$xml= new SimpleXMLElement($read);       //Интерпретирует XML-документ в объект

//Выводим XML на печать
foreach ($xml->topic as $item) {
    $title_topic=$item->title;       //выводим на печать название темы
    $link_topic=$item->link;         //выводим на печать ссылку
    $post=$item->content;            //выводим на печать текст сообщения
    $author_post=$item->author;      //выводим на печать автора последнего сообщения
    $time_post=$item->posted;        //выводим на печать дату сообщения
    echo "<div style=\"width: 100%;\"><a href=\"click_http.php?url=$link_topic\" target=\"_blank\">$title_topic</a><br /><b>Последнее сообщение</b> от <u>$author_post</u> в <u>$time_post</u><br /><b>Текст:</b> $post<br /><br /></div>";      
}
?>

По ссылке представлен как раз этот код.
Кстати, для того, чтобы точно знать можно ли получить на этом хостинге внешний файл попробуй запустить этот код на Денвере и на своем хостинге:
CODE
<?php
$url = 'http://musicshop.dp.ua/Folder2/xml/test.txt';

$read = file_get_contents($url);
echo $read;
?>


--------------------
PMEmail PosterUsers Website
Top

Topic OptionsСтраницы: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0406 ]   [ 10 queries used ]   [ GZIP выключен ]