Как анализировать данные XML, когда он возвращает две разные категории в зависимости от введенных данных? - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь получить информацию о погоде для приложения iPhone. Если я введу 5-значный почтовый индекс, код работает. Однако я хочу убедиться, что если пользователь не введет действительный город или почтовый индекс, это не приведет к сбою. Проблема заключается в том, что в Google Weather API данные XML читают «городские данные», когда вводится правильное место, и «данные проблемной причины», когда это недопустимое место. Пожалуйста, помогите!

-(IBAction) getlocation {
    NSString *locationentered = location.text;
    if ([locationentered isEqualToString: @""])  {
    locationlabel.text = @"Please Enter a Location";
}
    else {

    NSString * locationen =  locationentered;
    NSString * address = @"http://www.google.com/ig/api?weather=";
    NSString * request = [NSString stringWithFormat:@"%@%@",address,locationen];
    NSURL * URL = [NSURL URLWithString:request];
    NSError * error;    
    NSString* XML = [NSString stringWithContentsOfURL:URL encoding:NSASCIIStringEncoding error:&error];
    NSString * temptoday = [[[[XML componentsSeparatedByString:@"city data=\""] objectAtIndex:1] componentsSeparatedByString:@"\""] objectAtIndex:0];


    NSString * errorlocation = [[[[XML componentsSeparatedByString:@"problem_cause data=\""] objectAtIndex:1] componentsSeparatedByString:@"\""] objectAtIndex:0];
    if ([errorlocation isEqualToString: @""]) {
    locationlabel.text = @"Invalid Location";
    }


if ([temptoday isEqualToString:@"(null)"]) {

        locationlabel.text = @"Location present";
    }
else {

    locationlabel.text = temptoday;

    }
    }
}

1 Ответ

1 голос
/ 02 сентября 2011

Результатом является XML, поэтому используйте XMLParser, чтобы посмотреть на него. В этом случае стандартным Cocoa one является NSXMLParser, а затем настраивается делегат, который будет вызываться для каждого элемента.

Для начала элемента вам будет присвоено имя parser:didStartElement:namespaceURI:qualifiedName:attributes:, и в этом случае имя элемента будет передано problem_cause или Forecast_information, в зависимости от того, был ли ввод правильным.

Подробнее см. В руководстве Apple Event-Driven XML Programming или посмотрите на парсеры DOM из этого вопроса о стеке

...