2010-04-13 5 views
0

Mon code ne tire pas le lien approprié pour l'article. Au lieu de cela, il obtient le lien de l'élément précédent.SimpleXML ne tire pas le lien correct

Des suggestions? Merci!

<?php 
// Load the XML data from the specified file name. 
// The second argument (NULL) allows us to specify additional libxml parameters, 
// we don't need this so we'll leave it as NULL. The third argument however is 
// important as it informs simplexml to handle the first parameter as a file name 
// rather than a XML formatted string. 
$pFile = new SimpleXMLElement("http://example.blogspot.com/feeds/posts/default?alt=rss", null, true); 

// Now that we've loaded our XML file we can begin to parse it. 
// We know that a channel element should be available within the, 
// document so we begin by looping through each channel 
foreach ($pFile->channel as $pChild) 
{  

    // Now we want to loop through the items inside this channel 
    { 

    foreach ($pFile->channel->item as $pItem) 
    { 

     // If this item has child nodes as it should, 
     // loop through them and print out the data 


     foreach ($pItem->children() as $pChild) 
     { 
      // We can check the name of this node using the getName() method. 
      // We can then use this information, to, for example, embolden 
      // the title or format a link 
      switch ($pChild->getName()) 
      { 
       case 'pubDate': 
        $date = date('l, F d, Y', strtotime($pChild)); 
        echo "<p class=\"blog_time\">$date</p>"; 
        break; 

       case 'link': 
        $link = $pChild; 
        break; 

       case 'title': 

        echo "<p class=\"blog_title\"><a href=\"$link\">$pChild</a></p>"; 
        break; 

       case 'description': 
        // echo substr(strip_tags($pChild), 0 , 270) . "..."; 
        break; 



       case 'author': 
        echo ""; 
        break;  
       case 'category': 
        echo ""; 
        break; 
       case 'guid': 
        echo ""; 
        break; 

       default: 
        // echo strip_tags($pChild) . "<br />\n"; 
        break; 
      } 

     } 

    } 


    } 

} 

?> 

Répondre

2

Peut-être que je vais dire quelque chose de stupide (peut-être que je ne comprends pas tout à fait ce que vous essayez de faire?), mais je quelque chose comme cela ne serait pas OK:

$pFile = new SimpleXMLElement("http://example.blogspot.com/feeds/posts/default?alt=rss", null, true); 
foreach ($pFile->channel->item as $item) { 
    echo "date : " . (string)$item->pubDate . '<br />'; 
    echo "title : " . (string)$item->title . '<br />'; 
    echo "URL : " . (string)$item->link . '<br />'; 
    echo '<hr />'; 
} 


Fondamentalement , celui que vous avez chargé les données XML, vous pouvez itérer sur son contenu: il a une structure objet/tableau simple.

Ne hésitez pas à jeter un oeil à la sortie de var_dump($pFile);, pour voir à quoi ça ressemble ;-)


Et cette portion de code afficherait une sortie comme ceci:

date : Sun, 06 Feb 2005 13:39:00 +0000 
title : ROSHAN & 2ND IN COMMAND, WOULD LIKE TO THANK THE FOLLOWING PEOPLE, FOR UNITING WITH US FOR THE PEOPLE OF SRI LANKA. MAY GOD BLESS YOU ALL! 
URL : http://example.blogspot.com/2005/02/roshan-2nd-in-command-would-like-to.html 
====== 
date : Sat, 05 Feb 2005 23:26:00 +0000 
title : ROSHAN & 2ND IN COMMAND, UNITED!, FOR THE PEOPLE OF SRI LANKA, JOIN US! 
URL : http://example.blogspot.com/2005/02/roshan-2nd-in-command-united-for.html 
====== 
date : Sat, 05 Feb 2005 23:01:00 +0000 
title : 2ND IN COMMAND!, A HOT EMERGING NEW ARTIST! 
URL : http://example.blogspot.com/2005/02/2nd-in-command-hot-emerging-new-artist.html 
====== 
date : Sat, 05 Feb 2005 22:43:00 +0000 
title : ICP (IN COMMAND PRODUCTIONS), Hip-Hop R&B Music & much much more!, UNITED!, FOR THE PEOPLE OF SRI LANKA 
URL : http://example.blogspot.com/2005/02/icp-in-command-productions-hip-hop-rb.html 
====== 

Eh bien, vous devrez l'adapter un peu, si vous voulez afficher des balises HTML, mais cela devrait au moins vous aider à démarrer ...

+0

Cela fonctionne assez bien, ta! – kylex

+0

De rien :-) Amusez-vous! –

0

Ce qui me saute aux yeux est que vous écrasez la première pChild $ de foreach avec pChild $ du troisième foreach. Choisissez un nom de variable différent.