【问题标题】:How to loop and display (n) feeds using simpleXML and position()如何使用 simpleXML 和 position() 循环和显示 (n) 个提要
【发布时间】:2012-01-12 03:40:59
【问题描述】:

我正在使用 simpleXML,我想使用 position() 方法循环通过提要仅显示 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>";
}

关于如何让这个工作的任何建议

这是我正在使用的 XML 数据

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

【问题讨论】:

  • 即使没有乐趣,您也可以让事情顺利进行 - 那么,问题出在哪里? SCNR ;-) 说真的:如果没有机会看到您的输入 XML,那么为什么这种方法不起作用的所有赌注都被取消了。请编辑您的问题以包含 XML 文档。
  • 它是一个很大的 xml,但这个文件给了你大致的想法:)
  • 你试过foreach($xml-&gt;sortedXPath('/ArrayOfCatchUp/TV[…]', …)吗?
  • 不起作用的错误 - 传递给 SimpleDOM::sort() 的参数 1 必须是一个数组,布尔值

标签: php xpath simplexml simpledom


【解决方案1】:

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

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 的一部分,它是 library extending SimpleXML 的一部分,因此需要重新标记。

【讨论】:

  • 是的,我之前有过,但是在一周中的某些时候它会显示 6 个节目(随着新节目的添加),所以我希望 position() 方法能更好地工作。
  • 那将是非常奇怪。我想不出这个循环会输出超过 5 个条目的情况。如果有的话,请自己初始化 $i 并在循环内自己增加它。那么不可能输出超过 5 个,当然除非你有另一个例程来重置 $i 的值。很可能,您的错误在其他地方。
  • 我确实有这个额外的过滤器,它不会在实际传输之前显示未来的节目 $today_date = date('D j M, g:ia'); if(strtotime($item->TransmissionDate) ID."&a=false' class='link'> \n"; } 也许这可能会影响它????
【解决方案2】:

您是否考虑过您的循环将从item[0] 开始?所以$i &gt; 5 将输出前 6 个节点,因为计数将从第 0 项开始。只需将其更改为 $i &gt; 4 即可解决您的问题。

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多