XML的解析 SAX方式
来源:互联网 发布:试卷软件 编辑:程序博客网 时间:2024/05/02 02:54
XML的解析两种方式,我们来先看第一种,不需要在内存中排成树型结构再去解析的。xml文件如下:
viewcontroller中实现:
- (void)viewDidLoad { [super viewDidLoad]; BookXMLParser *parser = [[BookXMLParser alloc]init]; NSArray *books = [parser parseBooksWithXMLFileName:@"books"]; NSLog(@"%@",books);}
下面看核心部分 自定义解析类
1.创建解析类,并传入要解析的文件
- (NSArray *)parseBooksWithXMLFileName:(NSString *)name{ self.books = [NSMutableArray array]; NSString *path = [[NSBundle mainBundle]pathForResource:name ofType:@"xml"]; //创建系统提供的解析类 NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path]]; parser.delegate = self; //开始解析 [parser parse]; return self.books;}
实现代理方法,开始标签
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ NSLog(@"开始标签:%@",elementName); if ([elementName isEqualToString:@"book"]) { Book *b = [Book new]; [self.books addObject:b]; b.bookID = attributeDict[@"bookID"]; }}
发现字符串代理方法
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"发现文本:%@",string); self.currentString = string;}
结束标签代理方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"结束标签:%@",elementName); Book *b = self.books.lastObject; if ([elementName isEqualToString:@"title"]) { b.title = self.currentString; }else if ([elementName isEqualToString:@"price"]) { b.price = self.currentString; }else if ([elementName isEqualToString:@"page"]) { b.page = self.currentString; }else if ([elementName isEqualToString:@"author"]) { b.author = self.currentString; }}
通过输出结果我们一起理解一下sax解析过程
可以看到标签成对解析,开始标签–发现文本–结束标签–发现文本是一个过程,会逐层匹配。在这个过程中,我们每一次解析可以拿到自己想要的东西,赋值给模型类。这就是SAX解析
xml解析另一种,高效率方式DOM解析 具体参考微博:
http://blog.csdn.net/lee727n/article/details/73273411
阅读全文
0 0
- Sax的Xml解析方式
- XML的解析 SAX方式
- xml解析的sax解析方式
- SAX方式解析XML
- SAX方式解析XML
- XML解析-SAX方式
- XML的解析方式(DOM,SAX,StAX)
- SAX方式解析XML的简单方法
- android解析xml文件的SAX方式
- Android中XML的SAX解析方式
- XML文档的SAX解析方式
- jaxp的sax方式解析xml
- java XML的SAX解析方式
- XML解析补充---SAX方式
- android sax解析 xml方式
- SAX方式创建/解析xml
- 用sax方式解析xml
- 用SAX 方式解析 XML
- Cocos2d Lua API
- 利用 stringstream 和 getline 实现仅通过一次键盘录入初始化整个数组
- 详解当当网的分布式作业框架elastic-job
- 算法设计与应用基础系列13
- sitemesh无法加载body的class
- XML的解析 SAX方式
- SqL SERVER 语句执行方式差别
- shutdown for linux
- [Python模块学习]使用base64模块进行二进制数据编码
- 动态规划算法解最长公共子序列LCS问题
- 代理设计模式之静态代理与动态代理
- 计算机网络
- 获取VirtualBox COM对象失败,Unable to start the virtual device
- C++实验14