<fact>
태그의 CDATA 내용이 parser:foundCharacters
의 여러 콜백을 통해 점차적으로 반환됩니다.
: 당신이 클래스에서는과 같이, 인 NSMutableString 인스턴스에 추가하여 CDATA을 구축하려고 NSXMLParserDelegate에 부합하는 곳 (참고 : 여기 _currentElement가있는 NSString 속성이고 _factString는 인 NSMutableString의 속성입니다)
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
self.currentElement = elementName;
if ([_currentElement isEqualToString:@"fact"]) {
// Make a new mutable string to store the fact string
self.factString = [NSMutableString string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"fact"]) {
// If fact string starts with CDATA tags then just get the CDATA without the tags
NSString *prefix = @"<![CDATA[";
if ([_factString hasPrefix:prefix]) {
NSString *cdataString = [_factString substringWithRange:NSMakeRange((prefix.length+1), _factString.length - 3 -(prefix.length+1))];
// Do stuff with CDATA here...
NSLog(@"%@", cdataString);
// No longer need the fact string so make a new one ready for next XML CDATA
self.factString = [NSMutableString string];
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([_currentElement isEqualToString:@"fact"]) {
// If we are at a fact element, append the string
// CDATA is returned to this method in more than one go, so build the string up over time
[_factString appendString:string];
}
}