我已經開始使用simplexml函數,該函數看起來比我以前嘗試使用的其他解析器效果更好。我已經到了需要通過傳輸日期對物品 進行排序的階段 - 我嘗試使用uasort,但沒有對項目的順序進行任何更改。如何使用SimpleXML對XML提要進行排序
也有的時候一個程序在同一天不止一次 - 它會更容易排序通過videoID可以提供任何幫助嗎?
這個物體是什麼樣子:
[0] => SimpleXMLElement Object
(
[VideoID] => 108059
[Genre] => Music
[ProgrammeName] => MTV
[OriginalAiringDate] => 2009-11-10T19:22:24
[TransmissionDate] => 2009-11-10T19:22:24
)
[1] => SimpleXMLElement Object
(
[VideoID] => 108395
[ExpiryDate] => 2009-12-12T23:59:59
[DateCreated] => 2009-11-12T13:28:54
[Genre] => Music
[ProgrammeName] => MTV
[OriginalAiringDate] => 2009-11-12T19:22:32
[TransmissionDate] => 2009-11-12T19:22:32
)
$xml = simplexml_load_file("data.xml");
$count = 0;
$sortItem = 0;
$dateformat = "D j M, g:ia";
$sortArray = array();
foreach($xml->CatchUp as $item){
$sortArray[$count][TransmissionDate] = $item;
if($count < 4){
print "<p>Programme Name:<strong> " . $item->ProgrammeName. "</strong></p>";
print "<p>Date Shown:<strong> " . date($dateformat, strtotime($item->TransmissionDate)). "</strong></p>";
print "<p>Description:<strong> " . trunc($item->ShortSynopsis,30, " ")."</strong></p>";
print "<p><a href='". $item->VideoID. "'>". $item->VideoID."</a></p>";
$count++;
}
}
}
ASORT($ sortArray);
偉大的Josh它的工作原理,一個小問題,如果我想過濾的名稱,例如說只顯示前4 MTV節目只。 like if($ item-> Program ==「MTV」){}它似乎打破了 – NiseNise
第一個參數是一個XPath表達式。 ''CatchUp'的意思是「所有子節點名爲'CatchUp'」 - 您可以添加一個謂詞,如:'CatchUp [ProgrammeName =「MTV」]'將其轉換爲名爲'CatchUp'的所有子節點都有一個名爲子節點'ProgrammeName',其值爲''MTV''「 - 請參閱http://www.w3schools.com/XPath/xpath_syntax.asp –
談到XPath,我還應該提及您可以使用它來限制您的搜索到第一個通過添加謂詞'[position()<= 4]'來添加N個項目,從而不需要PHP中的計數器。我沒有提到它讓初學者變得簡單,但是任何需要操作XML的人都應該仔細看看XPath,因爲一旦你學會了基礎知識,它真的很強大,而且非常簡單。 –