2012-05-27 11 views
1

XML 파일에서 데이터를 가져와야하는 응용 프로그램을 개발 중입니다. 일부 노드는 문자를 많이 가지고 있고이 기능을 사용하여 문제를했습니다 :NSXMLParser 문제 : 모든 데이터를 가져 오지 못합니까?

내가 200를 얻을 것입니다 반면에 나는 단지 20 ~ 30 개 마지막 문자를 얻을 것이다 항목의 설명 노드에 대한 예를 들어
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

또는 300.

NSLog를 사용하여이 내용을 확인했는데 여기에서 문제가 발생합니다. 뭐가 잘못 됐는지 알아?

어떤 조언을 주셔서 감사합니다.

답변

2

SAX 파서는 한 번에 모든 문자를 가져올 수 있다고 보장하지 않습니다. 특정 블록에서 문자 청크를 여러 번 호출 할 수 있습니다. 코드는 그것들을 단일 문자열로 연결해야합니다.

파서 개체는 여러 파서 : foundCharacters : 메시지를 대리자에게 보내어 요소의 문자를보고 할 수 있습니다. 문자열은 현재 요소의 총 문자 내용 중 일부일 수 있으므로 요소가 변경 될 때까지 현재의 문자 누적에 추가해야합니다.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([qualifiedName isEqualToString:@"myTag"]) { 
     buf = [NSMutableString string]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([qualifiedName isEqualToString:@"myTag"]) { 
     buf = [buf stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     NSLog(@"Got %@", buf); 
    } 
} 

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [buf appendString:string]; 
} 
+0

답장을 보내 주셔서 감사합니다. stringByTrimmingCharactersInSet을 대체해야 할 코드의 예를 조금 줄 수 있습니까? 문자를 하나씩 가져 오거나 블록 단위로 가져 오겠습니까? – Rob

+1

트리밍 코드를 델리게이트의'parser : didEndElement : namespaceURI : qualifiedName :'메소드로 옮겨야합니다. "start element"메쏘드에서 버퍼를 지우고'foundCharacters' 메쏘드에서'appendString :'을 호출하여 변경 가능한 문자열 버퍼에 단순히'string'을 추가해야합니다. – dasblinkenlight

+0

감사 드리겠습니다. 고마워요. – Rob