#import <Cocoa/Cocoa.h>
@interface AOSParser : NSObject {
NSMutableString *capturedCharacters;
BOOL captureCharacters;
NSString *text;
NSMutableArray *items;
}
- (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error;
// NSXMLParserDelegate methods
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
@end
@implementation AOSParser
- (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error {
items = [NSMutableArray array];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
if (error && [parser parserError]) {
*error = [parser parserError];
}
//[parser release]; // Seems to be auto-released
return [items retain];
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
//NSLog(@"<%@>", elementName);
if ([elementName isEqual:@"string"]) {
captureCharacters = YES;
capturedCharacters = [NSMutableString string];
}
}
- (void)parser:(NSXMLParser *)parser
foundCharacters:(NSString *)string {
//NSLog(@"Text: %@", string);
if (captureCharacters) {
[capturedCharacters appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
//NSLog(@"</%@>", elementName);
if (captureCharacters) {
captureCharacters = NO;
text = [NSString stringWithString:capturedCharacters];
[capturedCharacters release];
}
if ([elementName isEqual:@"string"]) {
[items addObject:text];
}
}
int main()
{
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"utf-8\"?><ArrayOfString xmlns:xsi=\"http://w...content-available-to-author-only...3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://w...content-available-to-author-only...3.org/2001/XMLSchema\" xmlns=\"http://t...content-available-to-author-only...i.org/\"><string>Desert.jpg</string><string>Koala.jpg</string><string>Tulips.jpg</string></ArrayOfString>";
NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding];
AOSParser *parser = [[AOSParser alloc] init];
NSError *error = nil;
NSMutableArray *items = [parser parseXMLData:xmlData parseError:&error];
if (error) {
NSLog(@"Error: %@", [error localizedDescription]);
}
NSLog(@"Items: %@", items);
[parser release];
[items release];
[myPool drain];
return 0;
}
@end