2010-01-27 4 views
0

J'utilise simpleXML et je veux boucler le flux pour afficher seulement 5 spectacles en utilisant la méthode position(), mais je n'ai aucune joie à l'obtenir travaillerComment faire une boucle et afficher (n) des flux en utilisant simpleXML et position()

foreach($xml->sortedXPath('TV[position() < 5 and ProgrammeName="MTV"]', 'TransmissionDate', SORT_DESC) as $i => $item) 
{ 

    print "<a href='?v=".$item->ID."&a=false' class='link'>\n"; 
    print "\t<span class=\"text\">" .trunc($item->ShortSynopsis,25, " "). "</span>\n"; 
    print "\t</a>"; 
} 

des suggestions sur la façon dont je peux obtenir ce travail

cela les données XML Je travaille avec

http://deniselashlley.co.uk/test/data.xml

+0

Vous pouvez faire fonctionner les choses même si ce n'est pas une joie - alors, où est le problème? SCNR ;-) Sérieusement: Sans une chance de voir votre entrée XML, tous les paris pour lesquels cette approche ne fonctionne pas sont désactivés. Veuillez modifier votre question pour inclure le document XML. – Tomalak

+0

c'est un grand morceau de xml mais ce fichier vous donne l'idée générale :) – NiseNise

+0

avez-vous essayé 'foreach ($ xml-> sortedXPath ('/ ArrayOfCatchUp/TV [...]', ...)'? – Tomalak

Répondre

0

Thi s se sent comme un repos, mais quand même ...

NiseNise veut trier les nœuds puis garder le top 5. Le problème est que cette expression XPath sélectionne les 5 premiers nœuds dans le document, puis la méthode les trie. Ce que vous devez faire est une sorte tous les nœuds puis traiter uniquement la première 5.

foreach($xml->sortedXPath('TV[ProgrammeName="MTV"]', 'TransmissionDate', SORT_DESC) as $i => $item) 
{ 
    if ($i > 5) 
    { 
     break; 
    } 

    print "<a href='?v=".$item->ID."&a=false' class='link'>\n"; 
    // etc... 
} 

J'ai oublié de mentionner, sortedXPath() ne fait pas partie de SimpleXML, il fait partie d'un library extending SimpleXML, d'où le rebouclage,.

+0

Ouais je l'avais avant, mais certaines fois pendant la semaine, il afficherait 6 spectacles (comme un nouveau spectacle est ajouté), donc j'étais En espérant que la méthode position() fonctionnerait mieux – NiseNise

+0

Cela serait * extrêmement * bizarre Je ne peux pas penser à une situation où cette boucle produirait plus de 5 entrées Si quelque chose, initialise '$ i' vous-même et l'incrémente vous-même Il sera * impossible * alors de sortir plus de 5, à moins bien sûr que vous ayez une autre routine qui réinitialise la valeur de $ i.Plus probablement, votre bug est ailleurs –

+0

J'ai ce filtre supplémentaire cela ne veut pas afficher le futur montre avant qu'ils ne soient effectivement transmis $ today_date = date ('D j M, g: ia'); if (strtotime ($ item-> TransmissionDate) \ n "; } peut-être que cela pourrait l'affecter ???? – NiseNise

0

Avez-vous considéré que votre boucle commence à item[0]? Donc $i > 5 sortira les 6 premiers noeuds car le compte commencera à l'item 0. Il suffit de le changer en $i > 4 et cela devrait résoudre votre problème.

Questions connexes