2012-04-12 5 views
0

Ich würde besser damit anfangen zu sagen, dass ich kein Programmierer bin. Ich ändere einen Einkaufswagen und habe jetzt ein Problem, das über meinem Paygrade liegt. Der Warenkorb ermöglicht es mir, die Ausgabe eines RSS-Feeds in einem Block auf einer Seite anzuzeigen. Das Problem besteht darin, dass ein Großteil des Inhalts des Feeds innerhalb von CDATA-Tags liegt und daher nicht ordnungsgemäß angezeigt wird. Ich muss die CDATA-Tags aus dem Feed entfernen.Entfernen von CDATA Tags von RSS (xml) feed

Der Code, der das Futter verarbeitet ist

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(); 
     } 

Es ist die „Beschreibung“ ist, die sich um sie CDATA Tags bekam ist. Suche im Internet Ich habe diesen Code zum Entfernen von CDATA-Tags aus einer Zeichenfolge gefunden.

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

Ich nehme an, es ist ein Weg, um diese Funktion zu verwenden, um die CDATA-Tags aus der ganzen Beschreibung abzustreifen - oder vielleicht ist es nicht. Die Ausgabe des RSS-Feeds wird über eine .tpl-Datei angezeigt.

Alle und alle Hilfe dankbar angenommen.

Bruce

Antwort

0

Ändern Sie einfach die Linie

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

zu

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

funktionieren sollte. Der dritte Parameter weist die zugrunde liegende Bibliothek an, die von den simplex XML-Funktionen verwendet wird, um den Inhalt der CDATA in den Textknoten einzubinden (siehe http://php.net/manual/en/function.simplexml-load-string.php und http://www.php.net/manual/en/libxml.constants.php).

+0

Vielen Dank für Ihre Hilfe, aber es zeigt immer noch alle Informationen in den cdata Tags und nicht den HTML-Code um den Inhalt zu lesen. – user1328397

+0

Hm, tut mir leid, aber ich verstehe das Problem nicht wirklich. – rwos

+0

Keine Sorge - ich bin mir sicher, dass Sie noch viel mehr Verständnis dafür haben. – user1328397