2011-07-22 35 views
0

我必須解析XML和XML的鏈接是XML屬性pasrsing問題

http://qasimshah.sitesled.com/schedule.xml

,並可以解析爲:

-(IBAction)autoLoginBtn{ 

    NSString *url=[NSString stringWithFormat: @"http://qasimshah.sitesled.com/schedule.xml"]; 

    [self parseXMLFileAtURL:url]; 

} 
- (void)parseXMLFileAtURL:(NSString *)URL 
{ 
    xmlDataArray1 = [[NSMutableArray alloc] init]; 

    //you must then convert the path to a proper NSURL or it won't work 
    NSURL *xmlURL = [NSURL URLWithString:URL]; 

    // here, for some reason you have to use NSClassFromString when trying to alloc NSXMLParser, otherwise you will get an object not found error 
    // this may be necessary only for the toolchain 
    NSXMLParser *rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 

    // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks. 
    [rssParser setDelegate:self]; 

    // Depending on the XML document you're parsing, you may want to enable these features of NSXMLParser. 
    [rssParser setShouldProcessNamespaces:NO]; 
    [rssParser setShouldReportNamespacePrefixes:NO]; 
    [rssParser setShouldResolveExternalEntities:NO]; 

    [rssParser parse]; 

} 
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ 
    NSLog(@"Error on XML Parse: %@", [parseError localizedDescription]); 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
    //NSLog(@"found this element: %@", elementName); 
    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"Sports"]) { 
     // clear out our story item caches... 
     item = [[NSMutableDictionary alloc] init]; 
     currentTitle = [[NSMutableString alloc] init]; 
    } 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{  
    if ([elementName isEqualToString:@"Sport"]) { 

     [item setObject:currentTitle forKey:@"id"]; 

     [xmlDataArray1 addObject:[item copy]]; 
     NSLog(@"id: %@", currentTitle); 
    } 

} 

但是當我試圖讓「身份證'或name解析器檢測到它,但不會將它的值返回給我。 那我該如何得到它的價值?

回答

1

試試這個。你可以得到像這樣的所有值。

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI 
     qualifiedName:(NSString *)qName 
      attributes:(NSDictionary *)attributeDict 
     { 
      if([elementName isEqualToString:@"Sport"]) 
      { 
       NSString *s = [NSString stringWithFormat:@"%@",elementName]; 
       NSLog(@"%@",s); 

       NSString *s1 =[NSString stringWithFormat:@"%@",[attributeDict valueForKey:@"id"]]; 
       NSLog(@"%@",s1); 

       NSString *s2 =[NSString stringWithFormat:@"%@",[attributeDict valueForKey:@"name"]]; 
       NSLog(@"%@",s2); 

       NSString *s3 =[NSString stringWithFormat:@"%@",[attributeDict valueForKey:@"abbr"]]; 
       NSLog(@"%@",s3); 
      } 
     } 
2

你應該得到的屬性值 「attributeDict」

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    

你僅指元素...

1

didStartElement:你檢查「運動」,但在didEndElement:你檢查「運動」 ......