Cocoa/Objective-C : Best Practice to parse XML Document?

后端 未结 1 1413
灰色年华
灰色年华 2020-11-30 14:52

I never worked with XML in Cocoa before so I have no idea where to begin. Right now I need to parse a XML File (from Hard disc) into an object or even an Array of objects.

相关标签:
1条回答
  • 2020-11-30 15:37

    Hope this helps.

    Please take a look at:

    http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/XMLParsing/Articles/UsingParser.html#//apple_ref/doc/uid/20002264-BCIIJEEH

    Opening File:

    - (void)openXMLFile {
        NSArray *fileTypes = [NSArray arrayWithObject:@"xml"];
        NSOpenPanel *oPanel = [NSOpenPanel openPanel];
    
        NSString *startingDir = [[NSUserDefaults standardUserDefaults] objectForKey:@"StartingDirectory"];
        if (!startingDir)
            startingDir = NSHomeDirectory();
    
        [oPanel setAllowsMultipleSelection:NO];
        [oPanel beginSheetForDirectory:startingDir file:nil types:fileTypes
          modalForWindow:[self window] modalDelegate:self
          didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:)
          contextInfo:nil];
    }
    
    - (void)openPanelDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {
        NSString *pathToFile = nil;
        if (returnCode == NSOKButton) {
            pathToFile = [[[sheet filenames] objectAtIndex:0] copy];
        }
    
        if (pathToFile) {
            NSString *startingDir = [pathToFile stringByDeletingLastPathComponent];
            [[NSUserDefaults standardUserDefaults] setObject:startingDir forKey:@"StartingDirectory"];
    
            [self parseXMLFile:pathToFile];
        }
    }
    

    Parse:

    - (void)parseXMLFile:(NSString *)pathToFile {
        BOOL success;
    
        NSURL *xmlURL = [NSURL fileURLWithPath:pathToFile];
    
        if (addressParser) // addressParser is an NSXMLParser instance variable
            [addressParser release];
    
        addressParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
        [addressParser setDelegate:self];
        [addressParser setShouldResolveExternalEntities:YES];
    
        success = [addressParser parse]; // return value not used
                    // if not successful, delegate is informed of error
    }
    
    0 讨论(0)
提交回复
热议问题