IOS XML解析学习

本文介绍了一个使用Objective-C编写的XML解析器实现,该解析器能够读取并解析XML文件中的笔记数据,包括创建日期、内容及用户ID等信息,并通过NSNotification通知机制更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 XML文件:

 
<?xml version="1.0" encoding="UTF-8"?>
<Notes>
<Note id="1">
<CDate>2013-6-11</CDate>
<Content>ksdjfaljdfasf</Content>
<UserID>ALEX</UserID>
</Note>
<Note id="2">
<CDate>2012-6-11</CDate>
<Content>VVVVVVVVVVV</Content>
<UserID>ALEX11</UserID>
</Note>
</Notes>
 

//

//  NotesXMLParser.h

//  XML

//

//  Created by Alex on 13-6-12.

//  Copyright (c) 2013年 Alex. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

@interface NotesXMLParser : NSObject<NSXMLParserDelegate>

@property (nonatomic,strong) NSMutableArray *notes;

@property (nonatomic, strong) NSString *currentTagName;

-(void)start;

@end

 

 

//

//  NotesXMLParser.m

//  XML

//

//  Created by Alex on 13-6-12.

//  Copyright (c) 2013年 Alex. All rights reserved.

//

 

#import "NotesXMLParser.h"

 

@implementation NotesXMLParser

-(void)start

{

    NSString* path = [[NSBundle mainBundle] pathForResource:@"notes" ofType:@"xml"];

    

    NSURL *url = [NSURL fileURLWithPath:path];

    //开始解析XML

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    parser.delegate = self;

    [parser parse];

    NSLog(@"解析完成...");

}

 

//文档开始的时候触发

- (void)parserDidStartDocument:(NSXMLParser *)parser

{

    _notes = [NSMutableArray new];

}

 

//文档出错的时候触发

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError

{

    NSLog(@"%@",parseError);

}

 

//遇到一个开始标签时候触发

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName

  namespaceURI:(NSString *)namespaceURI

 qualifiedName:(NSString *)qualifiedName

    attributes:(NSDictionary *)attributeDict

{

    _currentTagName = elementName;

    if ([_currentTagName isEqualToString:@"Note"]) {

        NSString *_id = [attributeDict objectForKey:@"id"];

        NSMutableDictionary *dict = [NSMutableDictionary new];

        [dict setObject:_id forKey:@"id"];

        [_notes addObject:dict];

    }

    

}

 

//遇到字符串时候触发

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

    

     

string =[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //替换回车符和空格

    if ([string isEqualToString:@""]) {

        return;

    }

    NSMutableDictionary *dict = [_notes lastObject];

    

if ([_currentTagName isEqualToString:@"CDate"] && dict) {

        [dict setObject:string forKey:@"CDate"];

}

    

    if ([_currentTagName isEqualToString:@"Content"] && dict) {

        [dict setObject:string forKey:@"Content"];

}

    

    if ([_currentTagName isEqualToString:@"UserID"] && dict) {

        [dict setObject:string forKey:@"UserID"];

}

}

 

//遇到结束标签时候出发

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName

  namespaceURI:(NSString *)namespaceURI

 qualifiedName:(NSString *)qName;

{

    self.currentTagName = nil;

}

 

 

//遇到文档结束时候触发

- (void)parserDidEndDocument:(NSXMLParser *)parser

{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];

    self.notes = nil;

}

@end

 
 

#import "ViewController.h"

#import "NotesXMLParser.h"

 

@interface ViewController ()

 

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadView:) name:@"reloadViewNotification" object:nil];

    

    NotesXMLParser *parser=[NotesXMLParser new];

    [parser start];

 

    

}

 

//本文转载http://www.dahuangphone.com/dv_rss.asp?s=xhtml&boardid=8&id=133&page=3

转载于:https://www.cnblogs.com/richersongyu/p/3746951.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值