ios xml解析

来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:19 点击:

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 }

 

3. 调用回调函数。
      当完成上面的parser初始化并执行parser语句时([parser parse]),程序就会跳到代理方法,调用回调函数didStartElement,该方法会将整个xml遍历一遍,并识别xml里面的元素名称(elementName),在发现要查找的信息时,创建一个如数组或其他变量以便在合适的时候存储这些信息。一般地,具体完成相关存储的操作往往在didEndElement回调函数中完成。

//开始解析前,在这里可以做一些初始化工作
// 假设已声明有实例变量 dataDict,parserObject
- (void)parserDidStartDocument:(NSXMLParser *)parser {
   dataDict = [[NSMutableDictionary alloc] initWithCapacity:0];  //每一条信息都用字典来存储
   parserObjects = [[NSMutableArray alloc] init];  //每一组信息都用数组来存,最后得到的数据即在此数组中
}

//当解析器对象遇到xml的开始标记时,调用这个方法。
//获得结点头的值

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1