background image

ios xml 解析

    iOS SDK 的 NSXMLParser 解析 XML 文档是事件驱动模式的,即采用 SAX 方式来解析
XML 格式文档。NSXMLParser 在处理 XML 文档的过程 中当遇到一些要素(元素、属性 、
CDATA 块、评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给

 

NSXMLParserDelegate 处理。同时它也会报告错误。
1.  打开一个 xml 文件,读取内容到 NSData 中。NSString *path = [[NSBundle mainBundle] 
pathForResource:@”filename” ofType:@”xml”];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *data = [file readDataToEndOfFile];
[file closeFile];
2. 调用 NSXMLParser 的 initWithData:方法,并设置代理 delegate。
NSXMLParser *m_parser = [[NSXMLParser alloc] initWithData:data];
//设置该类本身为代理类,即该类在声明时要实现 NSXMLParserDelegate 委托协议
[m_parser setDelegate:self];  //设置代理为本地

BOOL flag = [m_parser parse]; //开始解析
if(flag) {
NSLog(@”获取指定路径的 xml 文件成功”);
}else{
NSLog(@”获取指定路径的 xml 文件失败”);
}
[m_parser release];

当然还可以有其他初始化生成方法,如:

       NSXMLParser  *parser  =  [[NSXMLParser  alloc]  initWithContentsOfURL:[NSURL 
URLWithString:urlString]];
    直接自定义一个方法来实现创建解析:
1 – (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error{
2     NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
3     [parser setDelegate:self];
4     [parser setShouldProcessNamespaces:NO];
5     [parser setShouldReportNamespacePrefixes:NO];
6     [parser setShouldResolveExternalEntities:NO];
7     [parser parse];
8     NSError *parseError = [parser parserError];
9     if (parseError && error) {
10         *error = parseError;
11     }
12     [parser release];
13 }