Как зациклить и отобразить (n) каналы, используя simpleXML и position () - PullRequest
0 голосов
/ 27 января 2010

Я использую simpleXML и хочу зациклить, хотя канал отображает только 5 шоу с использованием метода 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>";
}

любые предложения о том, как я могу заставить это работать

это данные XML, с которыми я работаю

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

Ответы [ 2 ]

0 голосов
/ 30 марта 2010

Рассматривали ли вы, что ваш цикл начнется с item[0]? Таким образом, $i > 5 выведет первые 6 узлов, потому что отсчет начнется с элемента 0. Просто измените его на $i > 4, и это должно решить вашу проблему.

0 голосов
/ 27 января 2010

Это похоже на репост, но в любом случае ...

NiseNise хочет отсортировать узлы, а затем оставить топ 5. Проблема в том, что это выражение XPath выбирает первые 5 узлов в документе, а затем метод сортирует их. Вам нужно отсортировать все узлы, а затем обработать только первые 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...
}

Я забыл упомянуть, sortedXPath() не является частью SimpleXML, он входит в библиотеку , расширяющую SimpleXML , и, следовательно, повторную маркировку.

...