Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用simpleXML和position()循环和显示(n)个提要_Php_Xpath_Simplexml_Simpledom - Fatal编程技术网

Php 如何使用simpleXML和position()循环和显示(n)个提要

Php 如何使用simpleXML和position()循环和显示(n)个提要,php,xpath,simplexml,simpledom,Php,Xpath,Simplexml,Simpledom,我使用的是simpleXML,我想使用position()方法循环feed,只显示5个显示,但我不喜欢让它工作 foreach($xml->sortedXPath('TV[position() < 5 and ProgrammeName="MTV"]', 'TransmissionDate', SORT_DESC) as $i => $item) { print "<a href='?v=".$item->ID."&a=false' class='

我使用的是simpleXML,我想使用position()方法循环feed,只显示5个显示,但我不喜欢让它工作

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>";
}
foreach($xml->sortedXPath('TV[position()<5和ProgrammeName=“MTV”]”,'TransmissionDate',SORT_DESC)作为$i=>$item)
{
打印“”;
}
有什么建议我可以让它工作吗

这就是我正在处理的XML数据


这感觉像是重新发布,但无论如何

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...
}
foreach($xml->sortedXPath('TV[ProgrammeName=“MTV”]”,'TransmissionDate',SORT_DESC)作为$i=>$item)
{
如果($i>5)
{
打破
}

“打印”,因此重新标记。

您是否考虑过循环将从
项[0]开始
?因此,
$i>5
将输出前6个节点,因为计数将从项目0开始。只需将其更改为
$i>4
,就可以解决问题。

即使没有乐趣,也可以让事情正常运行-那么,问题出在哪里?SCNR;-)认真地说:如果没有机会看到输入的XML,所有人都会打赌为什么这种方法不起作用无法工作。请编辑您的问题以包含XML文档。这是一大块XML,但此文件为您提供了大致思路:)您是否尝试过
foreach($XML->sortedXPath('/ArrayOfCatchUp/TV[…]',…)
?不起作用-参数1传递给SimpleDOM::sort()必须是一个数组,Boolean是的,我以前有过,但是在一周中的某些时候它会显示6个节目(随着一个新节目的增加),所以我希望这个位置()方法会更好。这会非常奇怪。我想不出这个循环会输出超过5个条目的情况。如果有任何情况,请自己初始化
$I
,并在循环中自己递增。然后输出超过5个条目是不可能的,当然,除非您有另一个重置
$i
。最有可能的是,您的错误在其他地方。我有一个额外的过滤器,它不允许在将来的节目实际传输之前显示它们$today\u date=date('D j M,g:ia');if(strotime($item->TransmissionDate)