編寫一個簡單的類,它將是解析器的委託。
@interface YourObject : NSObject <NSXMLParserDelegate> {
NSString *title, *body; // object attributes
NSXMLParser *parser; // will parse XML
NSMutableString *strData; // will contains string data being parsed
}
@property(readwrite, copy) NSString *title, body;
// will be used to set your object attributes
-(void)fetchValuesAtURL:(NSString *)url;
@end
fetchValuesAtURL:
方法將啓動解析操作。
@implementation YourObject
@synthesize title, body;
-(id)init {
self = [super init];
if(self) {
title = @"";
body = @"";
parser = nil;
strData = [[NSMutableString alloc] initWithCapacity:10];
}
return self;
}
-(void)fetchValuesAtURL:(NSString *)url {
if(parser) {
[parser release];
}
NSURL *xmlURL = [NSURL URLWithString:url];
parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[parser setDelegate:self];
[parser parse];
}
-(void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict {
// element is about to be parsed, clean the mutable string
[strData setString:@""];
}
// the probably missing method
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// content (or part of) has been found, append that to the current string
[strData appendString:string];
}
-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
// element has been parsed, test the element name
// and store strData accordingly
if([elementName isEqualToString:@"title"]) {
self.title = strData;
}
else { // or else if, here you got two elements to parse
self.body = strData;
}
}
-(void)dealloc {
[title release];
[body release];
[strData release];
if(parser) {
[parser release];
}
[super dealloc];
}
@end
然後:
YourObject *obj = [[YourObject alloc] init];
[obj fetchValuesAtURL:@"http://www.site.com/xml/url"];
NSXMLParser
的代表是能夠做很多事情,從蘋果Event-Driven XML Programming Guide描述。
有關代表方法的完整參考,請參閱NSXMLParserDelegate Protocol Reference。
可能重複的[XMLParser建議](http://stackoverflow.com/questions/8392089/xmlparser-advice) – 2011-12-27 21:15:42
不要只是重新發佈一個問題。您應該編輯您的原稿以便在必要時更加清晰,這也會將其打印到首頁。 – jrturton 2011-12-27 21:50:18
謝謝你的建議@jrturton – jisturiz 2011-12-27 22:20:29