我正在解析外部xml文件以显示总线的运行方式。
$xmlurl = 'https://api.trafiklab.se/sl/realtid/GetDpsDepartures.xml?siteId=9520&key=XXX';
$xml = simplexml_load_file($xmlurl);
结果如下:
<buses>
<DpsBus>
<Line>Blue</Line>
<Destination>North</Destination>
<Time>5 min</Time>
<DpsBus>
<DpsBus>
<Line>Green</Line>
<Destination>East</Destination>
<Time>7 min</Time>
<DpsBus>
<DpsBus>
<Line>Blue</Line>
<Destination>North</Destination>
<Time>9 min</Time>
<DpsBus>
...
</buses>
现在我显示如下结果:
$i = 0;
while ($i<100) {
echo $xml->Buses->DpsBus[$i]->Line;
echo $xml->Buses->DpsBus[$i]->Destination;
echo $xml->Buses->DpsBus[$i]->Time;
$i++;
}
但我可以以某种方式将这些数据分组到一个表中吗?
结果如下:
蓝北| 7分钟| 10分钟| 25分钟
蓝色南方| 5分钟| 15分钟| 25分钟
绿色南方| 10分钟| 15分钟| 20分钟
有什么想法吗?
答案 0 :(得分:0)
附注:您的XML需要修复,您需要关闭</DpsBus>
。
以下是我拍摄的照片:
$xml = simplexml_load_string($x); // assume XML in $x
// get a unique list of lines and destinations...
foreach ($xml->DpsBus as $bus) $lines[(string)$bus->Line.'|'.(string)$bus->Destination]='';
$lines = array_keys($lines);
// get the times
foreach ($lines as $l) {
list($line,$dest)=explode('|',$l);
$times = $xml->xpath("//DpsBus[Line='$line' and Destination='$dest']/Time");
echo "$line $dest: ";
foreach ($times as $time) echo "$time | ";
echo "<br />";
}
<强>输出:强>
Blue North: 5 min | 9 min |
Green East: 7 min |
看到它有效:http://codepad.viper-7.com/oy7Jxc
<强>解释强>
$lines
为关键字的line|destination
。关联数组中的键是唯一的。在代码行5 中使用array_keys()
会返回一个数组,其中包含所有可能的唯一line|destination
组合作为值,例如Blue|North
。$lines
并将line|destination
分隔为$line
和$destination
explode()
(代码行10 )<Time>
- <DpsBus>
个节点的节点,使用<line>
和<destination>
使用xpath
(代码行11 )。