php DOM xml解析出错


php DOM xml parsing geon awry

我今天似乎无法解析我的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);
}