2011-02-06 76 views
0

我有一個iPhone應用程序,我出去並得到一個XML文件,然後解析它的數據來創建對象。由於某些奇怪的原因,儘管我嘗試解析的文本總是具有零值。NSXML不解析條目的值

/* 
Sample entry 
<course> 
<name>Afton Alps Golf Course</name> 
<address>6600 Peller Ave S, Hastings, MN 55033</address> 
<desc>This is only a test</desc> 
<rating>69</rating> 
<location>42.12452 -90.53 </location> 
<course> 
*/ 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict { 
    if(nil != qName) { 
    elementName = qName; // swap for the qName if we have a name space 
    } 

    if ([elementName isEqualToString:@"course"]) { 
    self.currentCourse = [[[Course alloc] init] autorelease]; 
    } else { 
     self.propertyValue = nil; 
    } 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(nil != self.propertyValue) { 
    [self.propertyValue appendString:string]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {  
    if (qName) { 
    elementName = qName; // switch for the qName 
    } 
    if ([elementName isEqualToString:@"name"]) { 
     self.currentCourse.name = self.propertyValue; 
    } else if ([elementName isEqualToString:@"address"]) { 
     self.currentCourse.address = self.propertyValue; 
    } else if ([elementName isEqualToString:@"desc"]) { 
     self.currentCourse.description = self.propertyValue; 
    } else if ([elementName isEqualToString:@"rating"]) { 
     NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
     [f setNumberStyle:NSNumberFormatterDecimalStyle]; 
     self.currentCourse.rating = [f numberFromString: self.propertyValue]; 
     [f release]; 
    } else if ([elementName isEqualToString:@"location"]) { 
     NSArray *comp = [self.propertyValue componentsSeparatedByString:@" "]; 
     NSLog(@"%s", [comp objectAtIndex:0]); 
     NSLog(@"%s", [comp objectAtIndex:1]); 
     NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
     NSNumber *latitude = [formatter numberFromString:[comp objectAtIndex:0]]; 
     NSNumber *longitude = [formatter numberFromString:[comp objectAtIndex:1]]; 
     [formatter release]; 
     CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude.floatValue 
                 longitude:longitude.floatValue]; 
     self.currentCourse.location = location; 
     [location release]; 
    } else if([elementName isEqualToString:@"course"]) { 
     NSLog(@"We're done"); 
     [(id)[self delegate] performSelectorOnMainThread:@selector(addCourse:) 
              withObject:self.currentCourse 
             waitUntilDone:NO]; 
    } 

} 

**

回答

0

看看這段代碼在數據收到回調:

if(nil != self.propertyValue) { 
    [self.propertyValue appendString:string]; 
} 

你從未設置的PropertyValue任何地方(我認爲它會在的startElement方法進行設置,但它不是),所以你永遠不會追加數據。

0

每次啓動一個元素時,都會將propertyValue設置爲nil。當你找到字符時,self.propertyValue是零。

試試這個在您的parser:foundCharacters:消息,而不是:

if(self.propertyValue == nil) 
    { 
     self.propertyValue = [NSString stringWithString:string]; 
    }