2012-10-12 2 views
2

하나의 뷰에서 두 개의 XML 파일을 구문 분석해야하므로 두 개의 NSXMLParser를 사용하여 두 개의 NSXMLParser를 사용하여 가져온다. 그러나 그는 하나의 파서가 인식되고 두 번째 파서가 인식되지 않는 것을 알 수있다. 디버거가이 줄을 통과하면 [parser1 parse] 대리자 didStartElement, foundcharacters 및 didEndElement로 이동해야하지만 제 경우에는 디버거가 해당 대리자를 입력하지 않은 것입니다. 단순히 [parser1 release] stmnt.So에 위임됩니다. 이러한 대리자는 파서에게 인정받지 못 했어. 그래? 나는이 쓴 :단일 뷰에서 많은 NSXMLParser

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url];  
[parser setDelegate:self]; 
[parser setShouldProcessNamespaces:NO]; 
[parser setShouldReportNamespacePrefixes:NO]; 
[parser setShouldResolveExternalEntities:NO]; 
[parser parse]; 
[parser release]; 

    NSXMLParser *parser1 = [[NSXMLParser alloc] initWithContentsOfURL:Url1];  
[parser1 setDelegate:self]; 
[parser1 setShouldProcessNamespaces:NO]; 
[parser1 setShouldReportNamespacePrefixes:NO]; 
[parser1 setShouldResolveExternalEntities:NO]; 
[parser1 parse]; 
[parser1 release]; 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"TimeList"]) 
{ 
arr1=[[NSMutableArray alloc] init]; 
drr1=[[NSMutableDictionary alloc] init]; 

} 
if([elementName isEqualToString:@"Company"]) 
{ 
drr1=[[NSMutableDictionary alloc] init];   
} 
srr1=[[NSMutableString alloc] init]; 

} 


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


[srr1 appendString:string]; 
} 


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

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

[drr1 setObject:srr1 forKey:@"ID"]; 
[srr1 release],srr1=nil; 
return; 
} 

if([elementName isEqualToString:@"Company"]) 
{ 
[arr1 addObject:drr1]; 
}  


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

[drr1 release]; 

} 

    [srr1 release],srr1=nil; 
} 




- (void)parser1:(NSXMLParser *)parser1 didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"categorylist"]) 
    { 
     arr2=[[NSMutableArray alloc] init]; 
     drr2=[[NSMutableDictionary alloc] init]; 

    } 
    if([elementName isEqualToString:@"lookup"]) 
    { 
     drr2=[[NSMutableDictionary alloc] init];   
    } 
    srr2=[[NSMutableString alloc] init]; 

} 


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


    [srr2 appendString:string]; 
} 


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

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

     [drr2 setObject:srr2 forKey:@"Code"]; 
     [srr2 release],srr2=nil; 
     return; 
    } 

    if([elementName isEqualToString:@"lookup"]) 
    { 
     [arr2 addObject:drr2]; 
    }  


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

     [drr2 release]; 

    } 

    [srr2 release],srr2=nil; 
    } 

첫 번째 파서가 인식지고 두 번째 파서 didStartElement의 data.But을 받고 인정 받고되지 않습니다 ... 무엇 가능한 이유가 될 수 있을까?

+0

두 URL은 같은 XML 구조를 가지고 있습니까? – Codesen

+0

diffent URL 및 다른 구조, 나는 코드를 편집했습니다. 제발 봐 – Honey

+0

다른 URL이 좋습니다. 나는 XML 파일의 태그 이름에 대해 묻고있다 – Codesen

답변

2

나는이 내가 무슨 짓을 .. 내가 문자열을 선언 myself.Actually하여 해결하고 해당 조건이 그것을 구문 분석 후 사실 얻는 경우는, 검사 분석 it.While에 어떤 가치를 전달 :

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url];  
[parser setDelegate:self]; 
[parser setShouldProcessNamespaces:NO]; 
[parser setShouldReportNamespacePrefixes:NO]; 
[parser setShouldResolveExternalEntities:NO]; 
[email protected]"1"; 
[parser parse]; 
[parser release]; 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url1];  
[parser setDelegate:self]; 
[parser setShouldProcessNamespaces:NO]; 
[parser setShouldReportNamespacePrefixes:NO]; 
[parser setShouldResolveExternalEntities:NO]; 
[email protected]"2"; 
[parser parse]; 
[parser release]; 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
if([email protected]"1") 
{ 
    //do something 
} 
if([email protected]"2") 
{ 
    //do something 
    } 
    } 

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


    if([email protected]"1") 
    { 
     //do something 
    } 
    if([email protected]"2") 
    { 
     //do something 
    } 
    } 


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

    if([email protected]"1") 
    { 
    //do something 
    } 
    if([email protected]"2") 
    { 
     //do something 
    } 
    } 
+0

HI 똑같은 문제는 당신이 내 의견을 보았다면 나에게 당신과 공유하고 싶습니다. 나는 4 개의 URL을 가지고 있습니다. – jamil

+0

http://stackoverflow.com/questions/14995533/how-to-parse-multiple-xml-files-in-iphone 제발 내 문제를보세요 .. – jamil