2011-08-18 57 views
1

我想从两个不同的XML中读取数据来填充我的视图在iPhone中的字段。iPhone:如何在同一视图中访问多个XML

有什么方法可以在同一个视图中读取多个XML吗?我可以读取和解析一个XML。

感谢

//使用NSXML解析器

-(void)connection:(NSURLConnection *)connection 
didReceiveResponse:(NSURLResponse *)response{ 
[webData setLength:0]; 
} 


-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
[webData appendData:data];  
} 

-(void)connection:(NSURLConnection *)connection 
didFailWithError:(NSError *)error{NSLog(@"Connection Error"); 
[connection release]; 
[webData release];  
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
NSLog(@"Done, Received bytes: %d",[webData length]); 
NSString *theXML =[[NSString alloc] initWithBytes:[webData mutableBytes]length:[webData length]encoding:NSUTF8StringEncoding]; 
NSLog(@"XML value %@",theXML); 
     [theXML release]; 
     if (xmlParser) { 
       [xmlParser release]; 
     } 

     xmlParser = [[NSXMLParser alloc]initWithData:webData]; 
     [xmlParser setDelegate:self]; 
     [xmlParser setShouldResolveExternalEntities:YES]; 
     [xmlParser parse]; 
     [connection release]; 
     [webData release]; 
} 

- (void)parserDidStartDocument:(NSXMLParser *)parser{ 
     NSLog(@"found file and started parsing"); 

     //colorTypes = [[NSMutableArray alloc]init]; 
     propertyCategories = [[NSMutableArray alloc]init]; 
} 


-(void)parser:(NSXMLParser *)parser didStartElement:(NSString 
*)elementName namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName attributes:(NSDictionary 
*)attributeDict{ 
     if ([elementName isEqualToString:@"GetCommonCodeByCatgResult"]) { 
     } 

     if ([elementName isEqualToString:@"SvcCommonCode"]) { 

       aCategory =[[Category alloc]init]; 

       aCategory.CMCodeDesc = [attributeDict objectForKey:@"CMCodeDesc"]; 
       } 

} 

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

     if (!currentElementValue) 
       currentElementValue =[[NSMutableString alloc]initWithString:string]; 
     else 
       [currentElementValue appendString:string]; 


} 

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

     if ([elementName isEqualToString:@"GetCommonCodeByCatgResult"]) { 
     [itemCategoryList reloadAllComponents]; 
    //[colorList reloadAllComponents]; 
     return; 
     } 
if ([elementName isEqualToString:@"SvcCommonCode"]) { 

    [propertyCategories addObject:aCategory.CMCodeDesc]; 
//[colorTypes addObject: aCategory.CMCodeDesc]; 
    [aCategory release]; 
     aCategory =nil; 

} 

else 
[aCategory setValue:currentElementValue forKey:elementName]; 
[currentElementValue release]; 
currentElementValue = nil; 

} 
+0

您使用哪种XML解析器?你用什么代码来分析XML?没有这些信息,很难有人回答这个问题。 – 2011-08-18 22:15:24

+0

我已经添加了代码 – Katy

回答

1

使用一个布尔值,命名为isParsingNextString解析不同的字符串和元素。

//in viewDidLoad 
isParsingNextString = NO; 

//put this inside your begin parsing method 
if (isParsingNextString == NO) { 
    //parse 1st string URL 
} 

if (isParsingNextString == YES) { 
    //parse 2nd string URL 
} 

//when your document finishes set the bool to yes  
//now restart your parser inside an if statement so you dont have a parsing loop 
if(isParsingNextString == NO) { 
    isParsingNextString = YES; 
    [self parseXML]; 
} 
+0

谢谢路易我会尝试实施它。 – Katy

+0

嘿Louie,第二个XML没有被解析,应用程序崩溃。控制台上也没有错误。有什么建议么? – Katy

+0

确保你没有太早释放你的解析器,并确保你在第二个字符串中解释了不同的元素类型。 – Louie

相关问题