[英]How to to sort a XML feed with SimpleXML
我已经开始使用simplexml函数,该函数似乎比我尝试使用的其他解析器更好。 我已经到了需要按传输日期对项目进行排序的阶段-我尝试使用uasort,但不对项目的顺序进行任何更改。
有时某个程序在同一天不止一次运行-按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);
我看到了两种方法。 首先是创建一个包含TransmissionDate
值的数组,然后是另一个包含相应节点的数组,然后使用array_multisort()
。 这有点乏味,所以我要做的是:下载SimpleDOM并使用sortedXPath()
include 'SimpleDOM.php';
$xml = simpledom_load_file("data.xml");
$dateformat = "D j M, g:ia";
foreach($xml->sortedXPath('CatchUp[ProgrammeName="MTV"]', 'TransmissionDate') as $i => $item)
{
if ($i == 4)
{
// I assume you only want the first 4
break;
}
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>";
}
从您的SimpleXMLElement对象提取数据时尝试使用强制转换
使用视频ID: $sortArray[$count][VideoID] = (int)$item;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.