fork download
  1. #import <Cocoa/Cocoa.h>
  2.  
  3. @interface AOSParser : NSObject {
  4. NSMutableString *capturedCharacters;
  5. BOOL captureCharacters;
  6.  
  7. NSString *text;
  8. NSMutableArray *items;
  9. }
  10.  
  11. - (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error;
  12.  
  13. // NSXMLParserDelegate methods
  14. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
  15. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
  16. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
  17. @end
  18.  
  19. @implementation AOSParser
  20.  
  21. - (NSMutableArray *)parseXMLData:(NSData *)data parseError:(NSError **)error {
  22. items = [NSMutableArray array];
  23.  
  24. NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
  25. [parser setDelegate:self];
  26. [parser setShouldProcessNamespaces:NO];
  27. [parser setShouldReportNamespacePrefixes:NO];
  28. [parser setShouldResolveExternalEntities:NO];
  29.  
  30. [parser parse];
  31.  
  32. if (error && [parser parserError]) {
  33. *error = [parser parserError];
  34. }
  35.  
  36. //[parser release]; // Seems to be auto-released
  37.  
  38. return [items retain];
  39. }
  40.  
  41. - (void)parser:(NSXMLParser *)parser
  42. didStartElement:(NSString *)elementName
  43. namespaceURI:(NSString *)namespaceURI
  44. qualifiedName:(NSString *)qualifiedName
  45. attributes:(NSDictionary *)attributeDict {
  46.  
  47. //NSLog(@"<%@>", elementName);
  48.  
  49. if ([elementName isEqual:@"string"]) {
  50. captureCharacters = YES;
  51. capturedCharacters = [NSMutableString string];
  52. }
  53.  
  54. }
  55.  
  56. - (void)parser:(NSXMLParser *)parser
  57. foundCharacters:(NSString *)string {
  58.  
  59. //NSLog(@"Text: %@", string);
  60.  
  61. if (captureCharacters) {
  62. [capturedCharacters appendString:string];
  63. }
  64. }
  65.  
  66. - (void)parser:(NSXMLParser *)parser
  67. didEndElement:(NSString *)elementName
  68. namespaceURI:(NSString *)namespaceURI
  69. qualifiedName:(NSString *)qName {
  70.  
  71. //NSLog(@"</%@>", elementName);
  72.  
  73. if (captureCharacters) {
  74. captureCharacters = NO;
  75. text = [NSString stringWithString:capturedCharacters];
  76. [capturedCharacters release];
  77. }
  78.  
  79. if ([elementName isEqual:@"string"]) {
  80. [items addObject:text];
  81. }
  82. }
  83.  
  84. int main()
  85. {
  86. NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
  87.  
  88. 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>";
  89.  
  90. NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding];
  91.  
  92. AOSParser *parser = [[AOSParser alloc] init];
  93.  
  94. NSError *error = nil;
  95. NSMutableArray *items = [parser parseXMLData:xmlData parseError:&error];
  96.  
  97. if (error) {
  98. NSLog(@"Error: %@", [error localizedDescription]);
  99. }
  100.  
  101. NSLog(@"Items: %@", items);
  102.  
  103. [parser release];
  104. [items release];
  105.  
  106. [myPool drain];
  107. return 0;
  108. }
  109. @end
  110.  
Success #stdin #stdout 0.03s 10816KB
stdin
Standard input is empty
stdout
Standard output is empty