2011-02-06 47 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]; 
    }