2011-10-30 5 views
0

今日私のXMLを解析できないようです。私は何を間違えたのですか?誰かが私をより良い/働く解決策に導くことを望んでいます。出発地と目的地のユーザの入力に基づいてphp DOM 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> 

、私は見つけるために、ストップのリストを検索する:

私はこのようになりますバス路線のxmlファイルを解析します目的のバスを選択するだけで、このリストを解析するだけでは機能しません。

<?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 $ stop) - 無効な引数です。

各ルートからの不確定なリストの子ノードを解析する正しい方法は何ですか?

あなたは、次のいずれかを実行する必要が

答えて

0

$route=$buses->item($i)->getElementsByTagName('route')->item(0); 

変更

$route=$buses->item($i)->getElementsByTagName('route'); 

あなたがバス要素で唯一のルート要素があることがわかっている場合

複数のルートアイテムがある場合は、反復する必要があります。

+0

ありがとうございます。 – Martin

0

$ルートは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); 
} 
+0

バスで、私はリスト内のアイテムの位置が必要です - 私はこのサブセットを介して共通の宛先を見つけるためには、ポイントAからポイントBには到達しない共通ポイントCを停止する必要があります2つのバス。 – Martin

+0

ああ、私は参照してください。 foreachをやって、$ position ++を使うのはやはりよかったです – pguardiario