2013-05-08 54 views
0

解析許多不同種類的XML提要並且針對每種不同情況都有方法,我沒有任何問題。我碰到過一個,我不熟悉如何攻擊它。基於價值解析XML元素屬性

feed中的元素屬性不是什麼大不了的,但元素的某些屬性就像這樣,其輸出基於一個值。

tornado="0" funnelcloud="0" wallcloud="0" rotation="0" hail="1" wind="0" flood="0" flashflood="0" other="0" 

所以基本上如果有1個它將輸出數據。那麼我如何解析它,以便輸出列出的那個?我想我需要一個數組呢?如果有這樣的例子,所以我可以得到一個想法?

下面是我如何解析數據,這很好用。輕量級和簡單。

$data = "http://www.spotternetwork.org/data.php"; 
$xml = simplexml_load_file($data); 

foreach($xml->report as $report){ 

    $date = $report['stamp']; 
    $narrative = $report['narrative']; 
    $loc = $report['city1']; 
    $tz = $report['tz']; 

    $time = strtotime($date.' UTC'); 
    $dateInLocal = date("D g:i a", $time); 

-Thanks

+0

我打開'http://www.spotternetwork.org/data.php'並查看xml輸出,並且您正在執行此操作,那麼問題是什麼? – NullPointer 2013-05-08 04:28:10

+0

這就是你看到的不同數據。那些位置報告不是風暴報告。風暴報告將處於最底層。仔細看,你不會看到我發佈的屬性,因爲沒有暴風雨報告。 – Texan78 2013-05-08 06:09:27

+0

好的。所以你的意思是你想添加'store report''元素''在你的XML中,並且你想根據'@ hail'屬性的值追加它,這是否正確? – NullPointer 2013-05-08 06:20:26

回答

0

你需要指定你用的是什麼來解析XML,但假設它的SimpleXML,你可以這樣做:

$attrs = []; 
foreach($report->attributes() as $a => $b) { 
    $attrs[$a] = $b; 
} 

$value = array_search('1', $attrs); 

開關:

switch ($value) { 
    case 'hail': 
     echo "hail stuff"; 
     break; 
    case 'tornado': 
     echo "tornado stuff"; 
     break; 
} 
+0

對不起,我不知道是否需要。我已將它添加到我原來的帖子中。所以我回應冰雹屬性,它返回1.所以我想我需要像冰雹1顯示冰雹龍捲風1顯示龍捲風等類似的東西......我沒有經驗與PHP還沒有找出邏輯,因爲這不是我以前見過的東西。 – Texan78 2013-05-08 04:27:40

+0

我已經稍微編輯了我的代碼。基本上是的,你需要有一個像我的答案一樣的開關。 – 2013-05-08 04:34:18

+0

謝謝我會試試這個。目前沒有傳入的數據供我測試。 – Texan78 2013-05-08 05:44:29