IOS xml解析

//使用 GDataXMLNode
    /*
     DOM解析
     特点:将整个 XML 数据 以树形结构形式存入内存中
     优点:可以直接定位到指定的位置进行数据读取,快速
     缺点:占内存,不能读取大型数据
     */

导入第三方类库 GDataXMLNode

设置配置:


-(void)xmlDOM
{
NSMutableArray *mArray = [NSMutableArray array];
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"book" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:filePath];


//创建解析工具 GData 对象
GDataXMLDocument *xmlDocument = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
//获得树形结构的根节点
GDataXMLElement *rootElement = xmlDocument.rootElement;
//遍历跟节点上的子节点
for (GDataXMLElement *subElement in rootElement.children) {
NSLog(@"%@",subElement);
//每次找到一个节点就创建一个 BookModel 对象
BookModel *model = [BookModel new];
for (GDataXMLElement *element in subElement.children) {
[model setValue:element.stringValue forKey:element.name];
}
[mArray addObject:model];
}
//遍历数组
for (BookModel *model in mArray) {
NSLog(@"title = %@,author = %@,year = %@,price = %@",model.title,model.author,model.year,model.price);
}


}


/*
     SAX 解析
 特点:逐行解析
 优点:不占内存,可以解析大型数据
 缺点:效率低,不能解析指定位置的数据
 
 */
   
-(void)xmlSAX
{
/*
     SAX 解析
 特点:逐行解析
 优点:不占内存,可以解析大型数据
 缺点:效率低,不能解析指定位置的数据
 
 */
    
    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"book.txt" ofType:nil];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    
    NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data];
    xmlParser.delegate = self;
    
    //执行解析(手动调用)
    [xmlParser parse];

}
#pragma mark ---NSXMLParserDelegate---
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    _dataArray = [NSMutableArray array];
    
}
//解析标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict
{
   //解析标签,当标签为 book 时候,说明当前节点是一个书的信息,找到一个书的信息就创建一个 BookModel 对象
    if ([elementName isEqualToString:@"book"]) {
        BookModel *model = [BookModel new];
        [_dataArray addObject:model];
    }
    _elementName = elementName;
    NSLog(@"elementName = %@",elementName);

}
//读取标签里面的值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    BookModel *model = [_dataArray lastObject];
    [model setValue:string forKey:_elementName];
}
//读取结束标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
{
    _elementName = nil;
    
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    for (BookModel *model in _dataArray) {
        NSLog(@"title = %@,author = %@,year = %@,price = %@",model.title,model.author,model.year,model.price);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值