0

我已经对此进行了搜索,但我没有任何运气找到我正在寻找的东西。我正在使用 simpleXML 来解析我制作的 RSS 提要,它非常适合只显示一个条目。我正在尝试修改此方法以仅提取最新更新的条目。我如何让它更新或只提取最新条目?

这就是我现在所拥有的,它解析 RSS 提要并只显示一个条目,但是,这是我卡住的地方,因为我只想显示最近的条目。

这只是解析提要的最相关代码的片段。

//Set initial output to false
    $tData = false;
for($i = 0; $i < 1; $i++){

    $location = $xml->reports[$i]->location;
    $upperCase = strtoupper($location);
    $report = $xml->reports[$i]->report;
    $timestamp = $xml->reports[$i]->timestamp;
    $updateTime = DATE("g:i A", STRTOTIME($timestamp));

// Set table style
   $tableStyle = "width: 100%; margin:0px auto; background-color:{$bkgColor};";
   $td1Style = "{$tbrdr};{$sbrdr}; text-align:center; font-size: 11px; background-image:url({$imagesDir}headerbgd2.gif); color:{$dtColor};";
   $td2Style = "{$sbrdr}; text-align:center; font-size: 12px; padding: 1px 0px 1px 0px; background-color:{$bkgColor};";
   $td3Style = "{$sbrdr}; {$bbrdr}; text-align:center; background-color:{$bc};";

 // construct data for table display
    $tData .= "<table style='{$tableStyle}' cellpadding='0' cellspacing='0'>\n";
    $tData .= "<tbody>\n";
    $tData .= "  <tr><td style='{$td1Style}'>LATEST LOCAL STORM REPORT</td></tr>\n";
    $tData .= "  <tr><td style='{$td2Style}'><b>{$report}</b>&nbsp;&nbsp; - &nbsp;&nbsp;<span style='color: rgb(204, 102, 0);'>{$upperCase} - {$updateTime}</span></td></tr>\n";
    $tData .= "  <tr><td style='{$td3Style}'><a href='wxmesqLSR.php' title='Click to view the details'>Click here for details</a></td></tr>\n";
    $tData .= "</tbody>\n";
    $tData .= "</table>\n";
    $tData .=  $afterTable;

 }

编辑: XML 文件示例

<?xml version="1.0"?>
<entrys>
  <reports>
    <timestamp>Thu, 11 Jul 2013 23:19:39 -0500</timestamp>
    <name>Mesquite Weather</name>
    <location>Mesquite</location>
    <report>GENERAL</report>
    <description>Official MW test</description>
  </reports>
  <reports>
    <timestamp>Fri, 12 Jul 2013 00:44:39 -0500</timestamp>
    <name>Mesquite Weather</name>
    <location>Sunnyvale</location>
    <report>DOWNED POWER LINES</report>
    <description>Just an official MW test</description>
  </reports>
</entrys>

-谢谢!

4

2 回答 2

0

最新条目是转换为 Unix 时间戳时时间戳最高的条目。

在您当前的文档中,情况并非如此。所以让我们创建一个这样的 Unix 时间戳数组:

$timestamps = array_map('strtotime', $xml->xpath('/*/reports/timestamp'));

为了能够对这些进行排序,还需要报告,因为它们应该被排序:

$reports    = $xml->xpath('/*/reports');

现在你有一个时间戳数组:

Array
(
    [0] => 1373602779
    [1] => 1373607879
)

以及一系列报告:

Array
(
    [0] => SimpleXMLElement Object
        (
            [timestamp] => Thu, 11 Jul 2013 23:19:39 -0500
            [name] => Mesquite Weather
            [location] => Mesquite
            [report] => GENERAL
            [description] => Official MW test
        )

    [1] => SimpleXMLElement Object
        (
            [timestamp] => Fri, 12 Jul 2013 00:44:39 -0500
            [name] => Mesquite Weather
            [location] => Sunnyvale
            [report] => DOWNED POWER LINES
            [description] => Just an official MW test
        )

)

要根据另一个数组的值对一个数组进行排序,已在以下内容中进行了概述:

相同的原则适用于您在 simplexml 中的场景,不同之处在于您需要首先创建这些数组 - 这就是我已经演示过的内容。

希望这对你有帮助。排序 simplexml 的相关问题是:

于 2013-07-12T20:42:42.807 回答
0

您必须进行一些手动日期比较才能找到正确的条目,除非它们已经在 xml 中排序。所以基本上你的工作流程必须是:

  1. 遍历所有reports节点并读取其时间戳
  2. 将时间戳转换为可比较的值(使用strtotimeor date)并将它们全部比较以找到最新的reports
  3. 拿起reports识别为最新的并使用您现有的功能

如果它们在 XML 中按时间戳排序,则最近的条目将是第一个或最后一个。正如你的例子,第一个不是你要找的,我怀疑它可能是最后一个。如果是这种情况,只需找到reports元素的数量(最容易使用 XPath count(//reports)(或类似方法),然后读取reports具有此索引的元素。

于 2013-07-12T19:35:03.770 回答