kostenloser Webspace werbefrei: lima-city


RSS content:encoded und CDATA mit SimpleXML auslesen ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    soboo

    soboo hat kostenlosen Webspace.

    Hallo

    Wenn ich die Tagesschau RSS mit SimleXML auslese,
    dann bekomme ich nicht alle tag/element">Elemente ins Object (Array)

    der TAG <content:encoded> fehlt komplett ?!

    $cache_file = 'data/tagesschau.xml' 
    // --- Cache Funktion (hier entfernt) 
    
    $datastr = file_get_contents($cache_file); 
    
    $infodata = simplexml_load_string($datastr);
    
    foreach ($infodata->channel->item as $item) {  
    
    echo "<pre>\r\n"; 
    print_r($item); 
    echo "</pre>\r\n";  
    
    }


    Ausgabe ist dann (hier mal nur ein $item)

    SimpleXMLElement Object
    (
        [title] => Die Preise in Deutschland steigen langsamer
        [link] => http://www.tagesschau.de/wirtschaft/inflation184.html
        [pubDate] => Mon, 30 Jan 2012 16:25:58 +0100
        [description] => Die Preise in Deutschland steigen immer langsamer. Im Januar betrug die Teuerung vorläufigen Berechnungen zufolge 2,0 Prozent, wie das Statistische Bundesamt mitteilte. Das wäre der vierte Rückgang der Inflationsrate in Folge. Im September hatte das Plus noch bei 2,6 Prozent gelegen.
        [guid] => http://www.tagesschau.de/wirtschaft/inflation184.html
    )


    aber in der RSS ist doch noch ein content TAG (Element of item)
    <content:encoded><![CDATA[<p>hier weiterer HTML code</p>]]></content:encoded>

    doch der wird einfach ignoriert ?!

    wie kann ich auch dieses Element mit einlesen
    ... so dass es mit im den Daten ($item Array) ist ?!

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das nennt sich Namespaces.

    Ich glaube der Link erklärt dir alles.

    http://blog.stuartherbert.com/php/2007/01/07/using-simplexml-to-parse-rss-feeds/
  4. Autor dieses Themas

    soboo

    soboo hat kostenlosen Webspace.

    hmm Danke

    in der Tagesschau RSS steht oben die Zeile

    <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">


    und auf der verlinkten Seite steht im $ns Array

    'content' => 'http://purl.org/rss/1.0/modules/content/',


    also hat doch die Tagesschau RSS schon diesen NameSpace ?!
    warum es dann nicht geht ?

    ... ok, mit dem Code von der Seite funktioniert es

    aber da ich die RSS sowieso cache (nur nach mind. 30 Minuten neu abholen)
    habe ich noch eine etwas "dreckige" Lösungs-Möglichkeit:
    ---> einfach :content mit str_replace() aus dem XML-String entfernen

    $xmlstring = file_get_contents($cache_file); 
    
    $xmlstring = str_replace(':encoded','',$xmlstring); 
    
    $infodata = simplexml_load_string($xmlstring, null, LIBXML_NOCDATA);


    das geht auch, ist aber sicher nicht so eine "saubere" Lösung,
    ist dafür simple :)


  5. Stichwort: Namespace

    Beispiele für Ausgabe von <content:encoded> als (SimpleXML) Object, String und Array

    <?php 
    // -------------------------------------------------------- 
    
    header("Content-Type: text/html; charset=utf-8"); 
    
    // -------------------------------------------------------- 
    
    $sourceurl = 'deine_xml_datei.xml'; 
    
    $xmlobj = simplexml_load_file($sourceurl, null, LIBXML_NOCDATA);
    
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    
    $ns = array();  // ----- Namespace Array 
    
    $ns['content'] = 'http://purl.org/rss/1.0/modules/content/'; 
    
    ## $ns['wfw'] = 'http://wellformedweb.org/CommentAPI/'; 
    ## $ns['dc'] = 'http://purl.org/dc/elements/1.1/'; 
    	
    $i=0; 
    foreach($xmlobj->channel->item as $item) { 
    
    $content = $item->children($ns['content']); 
    
    print "<hr />\n"; 
    
    print "<h2>" . $item->title . "</h2>\n"; 
    print "<p>" . $item->pubDate . "</p>\n"; 
    print "<p>" . $item->guid . "</p>\n"; 
    
    $content_object = $content;
    
    print "<pre style=\"margin:4px; padding:4px; background:#FFFFCC; text-align:left;\">\n"; 
    print htmlentities( print_r($content_object, true) ); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    $content_string = (string)$content->encoded;
     
    print "<pre style=\"margin:4px; padding:4px; background:#FFFFCC; text-align:left;\">\n"; 
    print htmlentities( print_r($content_string, true) ); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    $content_array = get_object_vars($content);
    
    print "<pre style=\"margin:4px; padding:4px; background:#FFFFCC; text-align:left;\">\n"; 
    print htmlentities( print_r($content_array, true) ); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    $i++; 
    }
    
    // -------------------------------------------------------- 
    
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    print "<pre style=\"margin:4px; padding:4px; background:#DEDEDE; text-align:left;\">\n"; 
    print_r($xmlobj); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    
    // -------------------------------------------------------- 
    ?>


    ich denke das ist die "saubere" Lösung als mit str_replace() das "':encoded" zu entfernen
    :)
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!