ios xml 解析(2)


一、概述
由于xml具有强大的扩展性及清晰的结构,使其广泛用于各种文件配置,比如皮肤配置;那么在IOS该如何解析xml文件呢?xml解析必然要用到xml解析库,有libxml、tinyxml等,但在IOS的API中提供了NSXMLParser类,通过NSXMLParser可以实现快速访问xml中相关字段;

二、NSXMLParser类几个重要知识点
1、要使用NSXMLParser类,必须遵循NSXMLParserDelegate协议,即在自身类声明时,必须加上<NSXMLParserDelegate>
2、必须设置代理,这样才能够访问自身重定义的方法,即才能处理xml中数据;
3、以下对NSXMLParserDelegate协议中几个常用的方法进行说明:

- (void)parserDidStartDocument:(NSXMLParser *)parser;
该方法将在开始parse之前调用,用处是可以在其中对相应的对象进行分配和初始化;

- (void)parserDidEndDocument:(NSXMLParser *)parser;
该方法将在parse结束后调用,用处是进行相应的资源释放和处理;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
该方法将在parse期间碰到元素开始标志"<xxx"时调用,用于元素属性获取,其中elementName为元素名,attributeDict为相应的属性集合;

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
该方法是在遇到元素结束标志"</xxx>"调用;

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
该方法是遇到元素值时调用,通过它可以获取元素内容;


三、实例
/***************************************************************
**                                                       type.xml                                                     **
***************************************************************/
<?xml version="1.0" encoding="utf-8"?>
< skin>
     <string name="title" id="1">学习xml解析</string>
     <string name="content" id="1">hello world</string>
< /skin>


ViewController.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<NSXMLParserDelegate>

{
   
    NSMutableArray *viewArray;
   
}

@end





ViewController.m


- (void)viewDidLoad
{
    [super viewDidLoad];
     
    NSString * path = [[NSBundle mainBundle] pathForResource:@"type" ofType:@"xml"];
   
    NSLog(@"path:%@",path);
    NSData *xmlData = [NSData dataWithContentsOfFile:path];
    NSXMLParser *tempParser = [[NSXMLParser alloc] initWithData:xmlData];
    [tempParser setShouldProcessNamespaces:NO];
    [tempParser setShouldReportNamespacePrefixes:NO];
    [tempParser setShouldResolveExternalEntities:NO];
    [tempParser setDelegate:self];
    [tempParser parse];
   
 // Do any additional setup after loading the view, typically from a nib.
}

- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    //alloc
    NSLog(@"=======start parse=========");
    viewArray = [[NSMutableArray alloc] init];
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"=======end parse=========");
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"=======start element:%@=========", elementName);
    if ([elementName isEqualToString:@"skin"]) {
        NSLog(@"skin name=%@", [attributeDict objectForKey:@"name"]);
    } else if ([elementName isEqualToString:@"string"]) {
        NSLog(@"string name= %@ id=%@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"id"]);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{
    NSLog(@"=======end element:%@=========", elementName);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSLog(@"=======element content=%@=====", string);
}

@end




2013-12-10 16:22:30.949 xmlParserTest[2048:a0b] path:/Users/li.peng/Library/Application Support/iPhone Simulator/7.0/Applications/FEDF5F50-36B2-4542-9E95-50C8422FF6A5/xmlParserTest.app/type.xml
2013-12-10 16:22:30.951 xmlParserTest[2048:a0b] =======start parse=========
2013-12-10 16:22:30.952 xmlParserTest[2048:a0b] ======start element =========skin
2013-12-10 16:22:30.952 xmlParserTest[2048:a0b] skin name=skin1
2013-12-10 16:22:30.952 xmlParserTest[2048:a0b] =====element content=====
   
2013-12-10 16:22:30.953 xmlParserTest[2048:a0b] =====element content=====
   
2013-12-10 16:22:30.953 xmlParserTest[2048:a0b] ======start element =========string
2013-12-10 16:22:30.953 xmlParserTest[2048:a0b] string name =title id = 1
2013-12-10 16:22:30.953 xmlParserTest[2048:a0b] =====element content=====xue xi xml jiexi
2013-12-10 16:22:30.954 xmlParserTest[2048:a0b] ==============end element==string
2013-12-10 16:22:30.954 xmlParserTest[2048:a0b] =====element content=====
   
2013-12-10 16:22:30.954 xmlParserTest[2048:a0b] ======start element =========string
2013-12-10 16:22:30.955 xmlParserTest[2048:a0b] string name =content id = 1
2013-12-10 16:22:30.955 xmlParserTest[2048:a0b] =====element content===== hello xml
2013-12-10 16:22:30.955 xmlParserTest[2048:a0b] ==============end element==string
2013-12-10 16:22:30.957 xmlParserTest[2048:a0b] =====element content=====
 
2013-12-10 16:22:30.958 xmlParserTest[2048:a0b] =====element content=====
2013-12-10 16:22:30.958 xmlParserTest[2048:a0b] ==============end element==skin
2013-12-10 16:22:30.959 xmlParserTest[2048:a0b] =======end parse=========
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值