2013-07-12 29 views
0

我已经完成了对此的搜索,但是我还没有找到正在寻找的东西。我使用simpleXML来解析我所做的RSS提要,并且它非常适合只显示一个条目。我正试图修改这个方法,只是拉最近更新的条目。我如何得到它来更新或只是拉最近的条目?使用SimpleXML显示最新的XML订阅源条目

这就是我现在解析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> 

-Thanks的!

+0

你能提供正在处理的XML的样本?我们需要知道什么标识了“最近的入口” - 它是最后一个吗?目前你的问题是你不知道在你的input-XML中有多少条目,并且只有一次循环(由'$ i <1'定义)。这可以使用XPath来解决,但不知道XML结构。 – tfoo

+0

@tfoo定义了'$ i <1',所以它只返回一个条目。否则,如果有多个条目,它会显示多个条目,我只想显示一个条目,即最近的条目。我使用XML结构的示例更新了OP。 – Texan78

回答

0

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

  1. 遍历所有reports节点,并阅读其时间戳
  2. 转换时间戳对于比较值(使用strtotimedate),并比较他们都找到最新reports
  3. 拿起确定为最近的reports和使用您现有的功能

如果他们是通过在XML时间戳记排序,最新的条目会Ë ither是第一个还是最后一个。正如你的榜样,第一个不是你正在寻找的那个,我怀疑它可能是最后一个。如果是这样的情况下,简单地找到reports元素的量(最简单的使用XPath count(//reports)(或类似的),然后读取该索引的reports元件。

0

最新条目都被转换时所述一个与所述最高时间戳到Unix时间戳

在您当前的文档中,这还不是这种情况。因此,让我们建立这样的Unix时间戳数组:

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

现在你有一个:

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

为了能够进行排序这些,也需要为它们应该被排序的报告时间戳的数组:

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的相关问题是:

+0

这是有道理的,并认为它必须按日期/时间排序。与此有关的一个问题。请记住,XML只是一个例子。我真的不能创建一个数组,因为我不知道XML文件中有多少条目。它可以在1-20 +的任何地方。这些条目从提交时间起过期12小时后过期。 XML是通过我的一个页面上的表单创建的,用户可以将其提交给XML提要。所以我可以改变它,所以如果需要,时间戳是一个Unix时间戳。 – Texan78

+0

一个数组没有问题需要1-20 +条目。或200.或2 000.数组是一个列表,长度不受限制(只能是内存,但是在这种情况下,simplexml会消耗更多的内存,所以您不应该为此担心)。 – hakre

+0

@harke我明白那一部分。也许我只是有点困惑。我不需要创建阵列吗?如果是这样,我所说的是我不知道制作这个数组需要多长时间,因为我不知道这个XML会有多长。它可以是2-3个条目或20个以上的条目。所以当条目数量未知时,我无法创建数组。那有意义吗? – Texan78