2012-04-12 3 views
0

Мне лучше начать с того, что я не программист. Я изменяю корзину покупок, и теперь у меня проблема, связанная с моей платной подпиской. Тележка позволяет мне отображать вывод RSS-ленты в блоке на странице. Проблема в том, что большая часть содержимого корма находится внутри тегов CDATA и поэтому не отображается должным образом. Мне нужно вырезать теги CDATA из фида.Удаление тегов CDATA из rss (xml) feed

Код, который обрабатывает канал является

function fn_get_rss_feed($data) 
    { 
if (!empty($data['feed_url'])) { 
    $data_key = 'rss_data_cache_' . (isset($data['block_data']['block_id']) ? $data['block_data']['block_id'] : 0); 

    if (!empty($data['cache_time'])) { 
     Registry::register_cache($data_key, $data['cache_time'], CACHE_LEVEL_TIME); 
    } 

    if (Registry::is_exist($data_key) == false) { 
     $limit = !empty($data['max_item']) ? $data['max_item'] : 3; 
     $rss_data = array(); 

     $rss = simplexml_load_string(fn_get_contents($data['feed_url'])); 

     if (!empty($rss)) { 
      $it = 0; 
      $items = array(); 
      foreach ($rss->channel->item as $item) { 
       if ($it > $limit) { 
        break; 
       } 

       $items[] = array(
        'title' => (string)$item->title, 
     'description' => (string)$item->description, 
        'pubDate' => (string)$item->pubDate, 
        'link' => (string)$item->link 
       ); 

       $it++; 
      } 

      $rss_data = array(array(
       $items, 
       (string)$rss->channel->link, 
       $data['feed_url'] 
      )); 

      Registry::set($data_key, $rss_data); 
     } 

     return $rss_data; 
    } else { 
     return Registry::get($data_key); 
    } 
    } 

     return array(); 
     } 

Это «описание», который получил CDATA метки вокруг него. Поиск в сети Я нашел этот код для удаления тегов CDATA из строки.

 function strip_cdata($string) 
    { preg_match_all('/<!\[cdata\[(.*?)\]\]>/is', $string, $matches); 
    return str_replace($matches[0], $matches[1], $string); 
    } 

Я полагаю, что есть способ, чтобы использовать эту функцию, чтобы лишить теги CDATA со всего описания - или, может быть, там нет. Выходной файл rss отображается через файл .tpl.

Любая помощь с благодарностью получена.

Брюс

ответ

0

Просто перепрофилирования

$rss = simplexml_load_string(fn_get_contents($data['feed_url'])); 

в

$rss = simplexml_load_string(fn_get_contents($data['feed_url']), 'SimpleXMLElement', LIBXML_NOCDATA); 

должен работать. Третий параметр указывает базовую библиотеку, используемую функциями simplexml, для объединения содержимого CDATA в текстовый узел (см. http://php.net/manual/en/function.simplexml-load-string.php и http://www.php.net/manual/en/libxml.constants.php).

+0

Благодарим за помощь, но она по-прежнему отображает всю информацию внутри тегов cdata и не читает html вокруг содержимого. – user1328397

+0

Хм, извините, но я действительно не понимаю проблему. – rwos

+0

Не беспокойтесь - я уверен, что у вас все еще есть понимание, что я знаю. – user1328397

Смежные вопросы