Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсинг RSS (SAX)
Форумы портала PHP.SU » » XML и его обработка » Парсинг RSS (SAX)

Страниц (1): [1]
 

1. teddy - 12 Августа, 2013 - 17:46:51 - перейти к сообщению
Приветствую. Вообщем пытаюсь спарсить всякие RSS ленты, при помощи SimpleXML все проходит успешно, а вот в SAX какая то неразбериха. То есть получается либо забрать результат целиком, либо вообще ничего. Поясню подробнее:

Если к примеру в SimpleXML можно вывести результат отдельно типа echo $item->title;

То при парсинге с помощью SAX такое не прокатывает, почему? Или он может получать только единый текст без возможности разбиения его на части? Вот код:

PHP:
скопировать код в буфер обмена
  1. function onText($parser, $text)
  2. {
  3.     echo $text;
  4. }
  5.  
  6. $parser = xml_parser_create("UTF-8");
  7. xml_set_character_data_handler($parser, "onText");
  8. xml_parse($parser, file_get_contents("file.xml"));
  9.  


Можно ли как то по отдельности выводить результат? Чую надо смотреть в сторону xml_set_element_handler

Но как именно все это провернуть плохо представляю, если конечно такое возможно

Остановился приблизительно на таком варианте:

Спойлер (Отобразить)


Спасибо заранее
2. armancho7777777 - 12 Августа, 2013 - 18:54:45 - перейти к сообщению
xml_parse_into_struct ?
3. teddy - 12 Августа, 2013 - 19:48:58 - перейти к сообщению
armancho7777777
Спасибо большое, то, что нужно Улыбка

Результат:
PHP:
скопировать код в буфер обмена
  1.  
  2. $parser = xml_parser_create("UTF-8");
  3. $str = file_get_contents("test.xml");
  4. xml_parse_into_struct($parser, $str, $vals, $index);
  5. xml_parser_free($parser);
  6.  
  7. echo $vals[2]["value"]; //например
  8.  


Вдруг кому понадобится...
Ориентироваться по выбору значений элементов массива можно следующим образом:

PHP:
скопировать код в буфер обмена
  1. echo "<pre>";
  2. print_r($vals);
  3. echo "</pre>";
  4.  


Ну и выбираем по результату то, что нужно...

Спасибо ещё раз armancho7777777
(Добавление)
Но это так.. для развития кругозора

Походу SimpleXML самый удобный и простой
4. armancho7777777 - 12 Августа, 2013 - 20:07:21 - перейти к сообщению
Не за что.

teddy пишет:
Походу SimpleXML самый удобный и простой

Да.

 

Powered by ExBB FM 1.0 RC1