XML & JSON

X## XML & JSON

XML

SAX 解析

1.创建 XML 解析对象

    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"bookstore" withExtension:@"xml"];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:fileURL];

2.设置 XML 解析对象
3.开始解析

BOOL flag = [ xmlParser parse ];
if  (!flag){
    NSL(@"xmlParser parser error!!");
}

NSXMLParser 对象的代理方法:

  • (void)parserDidStartDocument:(NSXMLParser *)parser

当开始解析 XML 文档时,调用这个方法.通常在这个方法里,**创建储存模型对象的数组**

  • (void)parser:(NSXMLParser )parser didStartElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName attributes:(NSDictionary *)attributeDict

当开始解析,遇到元素的开始标签的时候,调用这个方法.通常在这个方法里,创建模型对象或者解析标签中的属性保存在模型对象中

  • (void)parser:(NSXMLParser )parser foundCharacters:(NSString )string

    当解析到 XML 标签的文本内容的时候,调用这个方法.通常在这里先暂存解析到的文本内容

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

    当解析 xml标签的文本内容的时候,调用这个方法.在这个方法中,需要将模型对象保存入数组中或者把标签对应的内容解析出来,保存在模型对象中( KVC)

  • (void)parserDidEndDocument:(NSXMLParser *)parser

    当整个 xml 文档全部解析结束的时候,该方法会被调用

  • (void)parser:(NSXMLParser )parser parseErrorOccurred:(NSError )parseError

    当遇到解析错误时,该方法会被调用

@interface ViewController () <NSXMLParserDelegate>
@property (nonatomic, strong) NSMutableArray *bookStore;
@property (nonatomic, strong) QYBooks *currentBook;
@property (nonatomic, strong) NSString *content;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)saxParse:(UIButton *)sender {
    // 1.获取 XML 文件路径
    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"bookstore" withExtension:@"xml"];

    // 2.创建 XML 文件解析器
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:fileURL];

    // 3.设置 XML 的委托
    parser.delegate = self;

    // 4.开始解析
    [parser parse];
}

#pragma mark - xml parser delegate
//解析开始是触发
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    _bookStore = [NSMutableArray array];
}
//遇见元素标签时触发
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    // 创建当前的 book 对象
    if ([elementName isEqualToString:kBook]) {
        _currentBook = [[QYBooks alloc] init];
        _currentBook.category = attributeDict[kCategory];
    }
    if ([elementName isEqualToString:kTitle]) {
        _currentBook.lang = attributeDict[kLang];
    }

}
//遇见文本内容时触发
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    _content = string;
}
// 遇见元素结束标签是触发
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:kBook]) {
        [_bookStore addObject:_currentBook];
    }else if ([elementName isEqualToString:@"bookstore"]){
        NSLog(@"解析即将完成");
    } else
    {
        [_currentBook setValue:_content forKey:elementName];
    }
}
// 解析结束时触发
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"%@",_bookStore);
}

// 解析错误时触发
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    NSLog(@"%@",parseError);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值