2012-07-05 240 views
1

xml文件:XML simpleDOM sortedXPath - 如何選擇和顯示父屬性?

<?xml version='1.0' encoding='utf-8'?> 

<MyName> 

<EventGroup Name="Japan Shows" ID="341"> 
    <Event Name="Sapporo" ID="40163" StartTime="07/07/12 06:00:00" /> 
    <Event Name="Consadole" ID="5106" StartTime="07/07/12 07:30:00" /> 
    <Event Name="Albirex" ID="4063" StartTime="07/07/12 05:20:00" /> 
    <Event Name="Niigata" ID="1144" StartTime="07/07/12 09:00:00" /> 
</EventGroup> 

<EventGroup Name="USA Shows" ID="342"> 
    <Event Name="Phoenix" ID="40162" StartTime="07/06/12 09:00:00" /> 
    <Event Name="California" ID="5105" StartTime="07/08/12 08:30:00" /> 
    <Event Name="Seattle" ID="4062" StartTime="07/08/12 02:20:00" /> 
    <Event Name="Chicago" ID="1143" StartTime="07/08/12 04:00:00" /> 
</EventGroup> 

</MyName> 

代碼:

<?php 
include 'SimpleDOM.php'; 
$xml = simpledom_load_file($cache_file); 
$count = 0; 
$max = 50; 

foreach ($xml->sortedXPath("EventGroup/Event", "@StartTime", SORT_ASC) as $EventGroup => $item) { 

$time = date("d/m - H:i", strtotime($item['StartTime'])); 
$event_name = $item['Name']; 

    if ($count < $max) { 
     echo "$time"; 
     echo "$event_name"; 
    } 
    $count++; 
} 
?> 

結果:

07/06 - 09:00 Phoenix 
07/07 - 06:00 Sapporo 
07/07 - 07:30 Consadole 
07/08 - 04:00 Chicago 

等......這些都是正確的。

但是如何顯示認可的EventGroup名稱?我如何選擇並顯示每個事件結果的父名稱屬性?我想要的結果應該是這樣的:

USA Shows 07/06 - 09:00 Phoenix 
Japan Shows 07/07 - 06:00 Sapporo 
Japan Shows 07/07 - 07:30 Consadole 
USA Shows 07/08 - 04:00 Chicago 

等等

在此先感謝您的幫助!

回答

1

您可以通過parentNode()獲得節點的父節點。然後你可以正常得到屬性值:

$parent = $item->parentNode(); 
echo $parent['Name']; 
+0

非常感謝你Josh!像魅力一樣工作。 – 2012-07-05 22:06:36

+0

現在我遇到了一個不同的問題,在@StartTime上排序顯示錯誤的排序結果,可能會導致我的Feed在英國時間(07/08/12 08:30:00,其中07是本月,應該是一天),以及而不是按天排序,按月排序。任何人都可以幫助我嗎? – 2012-07-12 15:57:48

+0

你應該做的是將日期存儲爲Unix時間戳。這是一個數字,所以可以立即排序。另外,不會有與日期格式相關的任何錯誤,您也不必使用'strtotime()'。 – 2012-07-12 23:02:58