我已经对此进行了搜索,但我没有找到我正在寻找的确切内容。我正在使用simpleXML来解析我所做的RSS提要,它非常适合只显示一个条目。我试图修改此方法只是拉最新更新的条目。我如何更新或仅提取最新条目?
这就是我现在解析RSS提要并只显示一个条目但是,这就是我被困的地方,因为我只想显示最近的条目。
这只是解析Feed的最相关代码的片段。
//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> - <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>
-Thanks!
答案 0 :(得分:0)
您必须进行一些手动日期比较才能找到正确的条目,除非它们已经在xml中排序。所以基本上你的工作流程必须是:
reports
个节点并读取其时间戳strtotime
或date
)并将它们全部比较以查找最新的reports
reports
的{{1}}并使用您现有的功能如果它们按XML中的时间戳排序,则最近的条目将是第一个或最后一个。就你的例子而言,第一个不是你要找的那个,我怀疑它可能是最后一个。如果是这种情况,只需查找reports
元素的数量(最简单的使用XPath count(//reports)
(或类似),然后使用此索引读取reports
元素。
答案 1 :(得分: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的相关问题是: