Проблема разбора XML-кода цели C - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь разработать приложение, которое получает четыре координаты.значения из файла XML.С XML-файлом все в порядке:

<boa1>
    <latitudine>43.10123355297304</latitudine>
    <longitudine>12.31807708740234</longitudine>
</boa1>
<boa2>
    <latitudine>43.07039260770269</latitudine>
    <longitudine>12.315673828125</longitudine>
</boa2>

Когда я анализирую его содержимое, пытаясь сохранить значения в свойствах своего класса (NSNumber), я могу получить только долготы ... Почему?Вот код:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

if ([elementName isEqualToString:@"latitudine"]) {
    if (flag == FALSE) {

        NSLog(@"flag FALSE Lat1=%@",result); 
        // HERE THE RESULT IS OK
        lat1 = [NSNumber numberWithDouble:[result doubleValue]];
        NSLog(@"Written Lat1=%@",lat1);
        // HERE THE RESULT is 0.. Why?
    } else {
        NSLog(@"flag TRUE Lat2=%@",result);
        // HERE THE RESULT IS OK
        lat2 = [NSNumber numberWithDouble:[result doubleValue]];            }
    NSLog(@"Written lat2=%@",lat2);
    // HERE THE RESULT IS 0!
}


else if ([elementName isEqualToString:@"longitudine"]) {

    if (flag == FALSE) {
        // HERE THE RESULT IS OK
        NSLog(@"flag FALSE Lon1=%@",result);
        lon1 = [NSNumber numberWithDouble:[result doubleValue]];
        NSLog(@"written LON1=%@",lon1);
        // HERE THE RESULT IS OK
        flag = TRUE;
        // [myRegata.coordinate insertObject:lon1 atIndex:1];
    } else {

        NSLog(@"flag TRUE Lon2=%@",result);
        // HERE THE RESULT IS OK
        lon2 = [NSNumber numberWithDouble:[result doubleValue]];
        // NSLog(@"written LON2=%@",lon2);
        // HERE THE RESULT IS OK


    }            


}}

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Возможно, вы добавляете также пробелы \ tab \ n к вашей строке результата, а затем numberWithDouble: fail из-за этого.

Так что используйте что-то вроде

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];

    [result appendString:string];

}

чтобы избежать этого.

1 голос
/ 12 июля 2011

Возможно, вы превысили пределы точности с плавающей запятой.Попробуйте использовать NSDecimalNumber вместо NSNumber.

0 голосов
/ 12 июля 2011

Здесь вы показываете данные в NSlog следующим образом:

  NSLog(@"Written Lat1=%@",lat1);
    // HERE THE RESULT is 0.. Why?

  NSLog(@"flag TRUE Lat2=%@",result);
    // HERE THE RESULT IS OK

Итак, когда вы используете для отображения результата, он отображает правильные данные, поскольку содержащийся в нем XML находится в строковом формате и может отображаться с использованием% @.Но когда вы показываете lat1, это не строчка, поэтому вы не можете показать его, используя% @, вместо этого вы можете использовать% f, так как он может быть как float или double, который вы использовали.

...