2013-07-12 33 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