我今天似乎无法解析我的xml。我做错了什么?我希望有人能给我指出一个更好的/可行的解决方案。
我想解析一个像这样的公交路线xml文件:
<buses>
<bus>
<num>12</num>
<stime>05:00</stime>
<etime>22:00</etime>
<freq>?</freq>
<route>
<stop>Eonyang Bus Terminal</stop>
<stop>Chuk Hyub</stop>
<stop>Eonyang Bolim Hospital</stop>
<stop>Samnammyeong Residential Center</stop>
<stop>SinAn</stop>
</route>
</bus>
<bus>
<num>13</num>
<stime>?</stime>
<etime>?</etime>
<freq>?</freq>
<route>
<stop>KTX Ulsan Station</stop>
<stop>Driving Hagwon</stop>
<stop>Jayeon Science High School</stop>
<stop>Eonyang Bus Stop</stop>
<stop>Bolim Hospital</stop>
<stop>Daewon Green Apt.</stop>
</route>
根据用户输入的出发地和目的地,我想搜索站点列表以找到所需的公共汽车,但简单地解析该列表不起作用。
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("buses-new.xml");
$buses=$xmlDoc->getElementsByTagName('bus');
for($i=0; $i<($buses->length); $i++) {
$route=$buses->item($i)->getElementsByTagName('route');
$busnum=$buses->item($i)->getElementsByTagName('num');
foreach( $route->childNodes as $stop) {
$loc = $stop->nodeValue;
if (stristr($loc,$orig)) {
// found a bus with origin
$origins[$ocount]= $i;
$ocount++;
}
if (stristr($loc,$dest)) {
// found a bus with destination
$destination[$dcount] = $i;
$dcount++;
}
} // for all stops
} // for all buses
我在---- foreach($route->childNodes as $stop)上得到一个错误-在无效参数中说。
解析每个路由中不确定的子节点列表的正确方法是什么?
您需要执行以下操作之一:
如果你知道bus元素中只有一个route元素:
改变$route=$buses->item($i)->getElementsByTagName('route');
$route=$buses->item($i)->getElementsByTagName('route')->item(0);
如果可以有多个路由项,则需要迭代:
$routes = $buses->item($i)->getElementsByTagName('route');
foreach($routes as $route)
{
foreach( $route->childNodes as $stop) {
...
}
$route是一个DOMNodeList。你想要的:
$route=$buses->item($i)->getElementsByTagName('route')->item(0);
也不是更好的迭代与foreach?
foreach($buses as $bus) {
$route = $bus->getElementsByTagName('route')->item(0);
$busnum = $bus->getElementsByTagName('num')->item(0);
}