2014-02-28 2 views
0

XML 웹 소스에서 콘텐츠 목록을 가져 오려고했습니다. 임 NSXMLParser atm을 사용하고 있습니다. 내가 프로그램을 실행하면 NSXMLParser가 닫는 태그를 찾을 수 없습니다.

- (void)main 
{ 

    self.workingArray = [NSMutableArray array]; 
    self.workingPropertyString = [NSMutableString string]; 


    NSURL *url = [[NSURL alloc]initWithString:@"http://myxmlwebsite.xml"]; 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];  
    [parser setDelegate:self]; 
    bool result = [parser parse]; 
    NSLog(@"result is ok for xml parse : %@", result ? @"Yes" : @"No"); 


    if (![self isCancelled]) 
    { 
     self.appRecordList = [NSArray arrayWithArray:self.workingArray]; 
     SubCategoryViewController *subCategoryViewController; 
     subCategoryViewController.entries = self.appRecordList; 
     [subCategoryViewController.tableView reloadData]; 

    } 

    self.workingArray = nil; 
    self.workingPropertyString = nil; 
    self.dataToParse = nil; 
} 


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

{ 

    if ([elementName isEqualToString:kUser]) 
    { 

     self.workingEntry = [[UserFetchAppRecord alloc] init]; 
    } 
    _elementsToParse = [[NSArray alloc] initWithObjects: 
         kid,ktitle, nil]; 
    self.storingCharacterData = [_elementsToParse containsObject:elementName]; 
} 



- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
             namespaceURI:(NSString *)namespaceURI 
            qualifiedName:(NSString *)qName 
{ 
    if (self.workingEntry) 
    { 

     if (self.storingCharacterData) 
     { 
      NSString *trimmedString = [self.workingPropertyString stringByTrimmingCharactersInSet: 
             [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
      [self.workingPropertyString setString:@""]; 
      if ([elementName isEqualToString:kid]) 
      { 
       self.workingEntry.ids = trimmedString; 
       NSLog(@"id : %@" , trimmedString); 
      } 
      else if ([elementName isEqualToString:ktitle]) 
      {   
       self.workingEntry.title = trimmedString; 
       NSLog(@"ktitle : %@" , trimmedString); 

      } 



     } 
     else if ([elementName isEqualToString:kUser]) 
     { 
      NSLog(@"inside elementName isEqualToString:kUser"); 
      [self.workingArray addObject:self.workingEntry]; 
      NSUInteger self_workingArrayCount = [self.workingArray count]; 
      self.workingEntry = nil; 
     } 
    } 

} 

지금 콘솔 내가 이러한 결과를 얻을 수

:

"ID"결과 = 사실 XML 구문 분석에 대한 확인이다 ": 1 여기

코드입니다

"ktitle : usertitle"

. . .

하지만 콘솔에서 탭을 닫지 않은 결과는 "elementName 내부의 isEqualToString : kUser"입니다.

가능한가?

내 XML의 태그는 다음과 같다 : if ([elementName isEqualToString:kUser])

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

에서

<Main> 
<user> 
<id></id> 
<title></title> 
</user> 
<user> 
<id></id> 
<title></title> 
</user> 
..... 
</Main> 
+2

if ([elementName isEqualToString : kUser])에 'else if'를 변경하십시오. – Akhilrajtr

+0

ooooops !!! 내 큰 실수! 고마워, az 대답 plz에 추가 –

답변

1

변경 else if ([elementName isEqualToString:kUser]).

self.storingCharacterDataid 또는 title이 시작될 때 YES이됩니다. 따라서 user 요소가 self.storingCharacterData 일 때 YES이되고 else if ([elementName isEqualToString:kUser])은 작동하지 않습니다.

관련 문제