1

A critical function in a PHP script I am debugging get's two attributes from an XML file on an external site. The attributes are labeled 'code' and 'locationCode' within a tag called Channel. The issue is that sometimes the locationCode is posted as an empty string ('') or not defined at all by the site for channels I cannot use, so I need to loop through the channels until I find a non-empty locationCode string. To do this, I created a while loop, but my current implementation does not successfully loop through the location codes. Is there a better way to implement this?

Current code:

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++;
    }
}

sample XML file for code: 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

2

1 Answer 1

1

There are two problems I can see with this line:

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

Firstly, you have typed an assignment (=) when what you wanted was a comparison (==). So instead of testing the condition, this line is over-writing the current value of $this->locationCode and then testing the "truthiness" of '', which evaluates to false, so the while loop never runs.

Secondly, the sample XML file shows that the attribute is not in fact empty, but contains some whitespace. Assuming these are the values you want to ignore (there are none in the sample right now which have any other value), you can use trim() to eliminate the whitespace from the comparison, giving you this:

while( trim($this->locationCode) == '' ) {
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.