1

PHP スクリプトの重要な機能 外部サイトの XML ファイルから get の 2 つの属性をデバッグしています。属性は、Channel というタグ内で「code」および「locationCode」とラベル付けされています。問題は、locationCode が空の文字列 ('') として投稿されたり、使用できないチャネルのサイトによってまったく定義されていないことがあるため、空でない locationCode 文字列が見つかるまでチャネルをループする必要があることです。これを行うために、while ループを作成しましたが、現在の実装ではロケーション コードを正常にループできません。これを実装するより良い方法はありますか?

現在のコード:

public function setChannelAndLocation(){
    $channelUrl="http://service.iris.edu/fdsnws/station/1/query?net=".$this->nearestNetworkCode.
    "&sta=".$this->nearestStationCode."&starttime=2013-06-07T01:00:00&endtime=".$this->impulseDate.
    "&level=channel&format=xml&nodata=404";
    $channelXml= file_get_contents($channelUrl);
    $channel_table = new SimpleXMLElement($channelXml);

    $this->channelUrlTest=$channelUrl;
    //FIXME: Check for empty locationCode string
    $this->channelCode = $channel_table->Network->Station->Channel[0]['code'];
    $this->locationCode = $channel_table->Network->Station->Channel[0]['locationCode'];
    $i = 1;
    while($this->locationCode=''){
    $this->channelCode = $channel_table->Network->Station->Channel[$i]['code'];
    $this->locationCode = $channel_table->Network->Station->Channel[$i]['locationCode'];
    $i++;
    }
}

コードのサンプル XML ファイル: http://service.iris.edu/fdsnws/station/1/query?net=PS&sta=BAG&starttime=2013-06-07T01:00:00&endtime=2013-10-12T18:47:09.5000&level =channel&format=xml&nodata=404

4

1 に答える 1

1

この行には 2 つの問題があります。

while($this->locationCode=''){

まず、必要=なものが比較 ( ==) であるときに代入 ( ) を入力しました。したがって、条件をテストする代わりに、この行は の現在の値を上書きしてから$this->locationCodeの「真実性」をテストし''、 に評価されるfalseため、whileループは実行されません。

次に、サンプル XML ファイルは、属性が実際には空ではなく、空白が含まれていることを示しています。これらが無視したい値であると仮定すると(現在、サンプルには他の値を持つものはありません)、 を使用trim()して比較から空白を削除すると、次のようになります。

while( trim($this->locationCode) == '' ) {
于 2013-11-06T19:15:06.567 に答える