iOS SDK中使用NSXMLParser解析XML

转载 2013年12月03日 21:25:01
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]];

直接自定义一个方法来实现创建解析:

- (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
    [parser setDelegate:self];
    [parser setShouldProcessNamespaces:NO];
    [parser setShouldReportNamespacePrefixes:NO];
    [parser setShouldResolveExternalEntities:NO];
    [parser parse];
    NSError *parseError = [parser parserError];
    if (parseError && error) {
        *error = parseError;
    }
    [parser release];
}

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的开始标记时,调用这个方法。
//获得结点头的值
//解析到一个开始tag,开始tag中可能会有properpies,例如<book catalog="Programming">
//所有的属性都存储在attributeDict中
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
     if([elementName isEqualToString:@"book"]) {
           NSString *catalog = [attributeDict objectForKey:@"catalog"];
     }else if() {
       //......
     }
}

//当解析器找到开始标记和结束标记之间的字符时,调用这个方法。
//解析器,从两个结点之间读取具体内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    //记录所取得的文字列
}

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{
    //NSLog(@"cData:%@",[NSString stringWithUTF8String:[CDATABlock bytes]]); 
}

//当解析器对象遇到xml的结束标记时,调用这个方法。
//获取结点结尾的值,此处为一Tag的完成
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

}
//xml解析结束后的一些操作可在此
- (void)parserDidEndDocument:(NSXMLParser *)parser {
   //.....
}

转载自:http://www.cnblogs.com/lovecode/articles/2305840.html

iOS 详解NSXMLParser方法解析XML数据方法

前一篇文章已经介绍了如何通过URL从网络上获取xml数据。下面介绍如何将获取到的数据进行解析。 下面先看看xml的数据格式吧! Circumference Nicholas Nicastro...
  • Crayon_DyS
  • Crayon_DyS
  • 2013年03月30日 10:37
  • 11230

iOS-XML文件解析(原生NSXMLParser和GDataXML两种解析方式)

XML文件解析常用的两种方式一种为苹果原生的NSXMLParser,另外一种为第三方GDataXML1.原生的NSXMLParser方式://*利用 NSXMLParser 方式 -(void)XML...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2016年08月30日 14:36
  • 5472

【IOS】AFNetworking 2.0中XML请求处理专题

因为AFNetworking2.0中,对于响应返回的xml格式没有做专门的解析处理,因此需要开发者自己来做处理。在笔者的项目中,使用了一个叫AFGDataXMLRequestOperation的第三方...
  • junbaozi
  • junbaozi
  • 2014年12月24日 18:56
  • 2673

iOS SDK中使用NSXMLParser解析XML

iOS SDK中使用NSXMLParser解析XML iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档。NSXMLParser在处理XML文...
  • silva_831
  • silva_831
  • 2012年04月06日 14:33
  • 1100

IOS SDK自带的XML解析库 libxml2使用方法(转)

IOS SDK自带的XML解析库 libxml2使用方法如下: 准备工作: 1、Xcode4.3.2,新建测试应用libxmltest。 2、把libxml包添加到项目中去。 ...
  • xubaimiao
  • xubaimiao
  • 2014年11月13日 13:58
  • 392

关于iOS解析XML使用NSXMLParser和GDataXML不得不说的一些事

NSXMLParser 最近刚学习iOS,需要解析一个XML如下:http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101,最开始选择使用自带的NS...
  • sunyuqing_419
  • sunyuqing_419
  • 2015年07月07日 20:01
  • 350

ios xml解析 NSXMLParser

  • 2013年06月25日 15:55
  • 33KB
  • 下载

iOS 详解NSXMLParser方法解析XML数据方法

前一篇文章已经介绍了如何通过URL从网络上获取xml数据。下面介绍如何将获取到的数据进行解析。 下面先看看xml的数据格式吧! Circumference Nicholas Nicastro...
  • Crayon_DyS
  • Crayon_DyS
  • 2013年03月30日 10:37
  • 11230

IOS开发之—xml文件解析(NSXMLParser类)

原文地址:http://blog.csdn.net/smallmuou/article/details/7404330 一、概述 由于xml具有强大的扩展性及清晰的结构,使其广泛用于各种文件配置,...
  • huadong2593
  • huadong2593
  • 2013年08月27日 00:01
  • 532

使用NSXMLParser解析XML数据

  • 2013年10月11日 17:09
  • 76KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS SDK中使用NSXMLParser解析XML
举报原因:
原因补充:

(最多只允许输入30个字)