2010-11-30 6 views
1

問題に項目のリストをラップ:私は、データベースからすべての場所を取得し、<loc>タグでそれらのすべてを包むしたい、次のコードは、いくつかにつながる、<loc>タグ内の各場所に置きます<loc>私は1つだけ必要です。ループ内(シンプルXML部分)にあるので、これをやっていることは分かっていますが、解決方法はわかりません。SimpleXMLを問題は、1つの<tag>

if($r7){ //$r7 = If query was successfull..  
     while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){ 
     $convXML_from_loc = $convXML_from->addChild('loc',$row['location']); 
     } 
    } 

ループから取り除くと、そこにデータベースの最初の場所(iirc)が置かれます。

これに代わるものは、親と子の要素を持たないため、すべてが同じレベルにあるので、私は悪い習慣だと思ったのはecho "<xml>";です。

この問題に関するすべてのガイダンスと、この件に関する関連情報へのリンクをお待ちしております。

よろしくお願いいたします。

EDIT:不明な点がある場合は、<loc>Row 1, Row 2</loc>のように1つのlocタグ内にすべて入力する必要があります。現時点では<loc>Row 1</loc><loc>Row 2</loc>となっています。

答えて

1

をあなたはすべての行を反復処理whileループを持っています。あなたは行があるのと同じくらい何回もループ内にあるものは何でもするつもりです。したがって、行数と同じ数の要素を各行に1つずつ作成します。

解決策は、whileループ内のすべての行データを含む文字列を生成してから、その文字列をループ外に追加することです(<loc>)。これにより、addChild()が1回だけ呼び出されるため、1つの<loc>要素が作成されます。

$location_data; 

if($r7){ //$r7 = If query was successfull..  
    while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){ 
     $location_data .= $row['location'] . ' ,'; 
    } 
} 

$location_data = substr($location_data, 0, -2); // strip off the final space and comma 
$convXML_from_loc = $convXML_from->addChild('loc',$location_data); // will result in '<loc>Row 1, Row 2</loc>' 
+0

明日、私はコードに再びアクセスできるようになると、それを試してみます。 '$ location_data。= $ row ['location']です。 '、'; '行1と2を文字列に入れますか? – Daniel

+0

これはうまくいきました、歓声。 – Daniel

1

あなたは、以下のXMLを生成するものを意味していますか?

<loc> 
    <location>row 1</location> 
    <location>row 2</location> 
    <location>row 3</location> 
</loc> 

試してみてください。

if($r7){ //$r7 = If query was successfull..  
    $loc = $convXML_from->addChild('loc'); // Add the <loc> tag 
    while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){ 
     $loc->addChild('location',$row['location']); // Add a <location> with value 
    } 
} 

一層のご説明を考えると、試してみてください。

if($r7){ //$r7 = If query was successful...  
    $locations = array(); 
    while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){ 
     $locations[] = $row['location']); 
    } 

    $convXML_from->addChild('loc', implode(', ', $locations)); // Add the <loc> tag 
} 
+0

いいえ、申し訳ありませんが明らかではない場合。私のデータベースには、Locationsを含む2行があります。それらはすべて「 1行2行 Daniel

+0

のように1つのlocタグ内に入れる必要があります。私はそれを試す時間がなかった、upvoted、最高の答えとしてマークされていませんでした。 – Daniel