Xml数据解析的基本数据流程
iOS开发过程中,我们经常会使用web service从服务器上获取数据,而数据格式多以json和xml为主,今天我们就xml的解析流程做以简单的分析。 首先,我们需要初始化一个NSXMLParser的实例parser用以解析xml数据,并且设置parser的delegate,然后就可以开始解析xml数据,解析的过程中通常主要回调以下几个函数: 1、- (void)parserDidStartDocument:(NSXMLParser*)parser; 2、- (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary*)attributeDict; 3、- (NSXMLParser*)parser foundCharacters:(NSString*)string; 4、- (NSXMLParser*)parser didEndElement:(NSString*)qName{ NSLog(@"endElement=%@",elementName); } 5、- (void)parserDidEndDocument:(NSXMLParser*)parser; 以上5个是在解析过程中来回调用的函数,我们可以以一个最简单的xml来开始分析: 例如: <?xml version="1.0"encoding="UTF-8"?> <liuyunpeng>ok</liuyunpeng> 我们可以将这个过程看作是xml解析器在解析一份数据,当xmlParser开始解析的时候,函数1就会被调用,然后xmlParser会继续解析,然后当其解析到一个标签(<huanghao>)的时候,函数2就会被调用,接下来,解析器就会试图读取标签中的内容,此时函数3就会被调用,读取标签后(ok)的内容,读取完之后,解析器就会试图去寻找其结束标签(</liuyunpeng>),找到之后,函数4就会被调用,然后解析器会继续解析,当他发现没有内容可以解析的时候,解析也就结束了,函数5就会被调用以上就是最基本的xml解析流程。 然而,再实际的过程中我们往往会处理更复杂的xml结构,但其大致流程都是一致的,下面以一个复杂一点的xml结构为例: > <liuyunpeng> <images> <id>0</id> <name>hottub1</name> <image>hottub-1.png</image> <artist>bluehost</artist> </images> 1</id> <name>hottub2<image>hottub-2.png2</id> <name>hottub3<image>hottub-3.png </liuyunpeng> 同样的,当解析器开始解析的时候,函数1就会被调用,接下来,解析器会继续解析,当他发现一个标签的时候(<liuyunpeng>),函数2就会被调用,然后解析器会试图读取标签(<liuyunpeng>)后的字符,此时就会有不同的分支:如果读取到了字符,那么接下来的流程就会像上面一样,否则,解析器就会继续解析,如果又读取到了标签(<images>),函数2就会再次被调用,然后解析器会试图读取标签后的内容,此时函数3会被调用,接下来同样会分成两个分支:如果读取到了,解析器就会试图找到其结束标签,此时函数4就会被调用,然后<images>节点就解析结束了,解析器会继续寻找结束标签</liuyunpeng>,然后他会读取到又一个<images>标签,然后就会继续解析该标签中的内容,而对于此例来讲,当解析器读到<images>标签时,会试图读取标签后的内容,此时函数3被调用,当然,他不会读取到任何字符,在继续读的过程中他会再一次读取到一个标签<id>,这时他会试图去读取标签后的内容,函数3被调用,读取到字符之后,他会继续解析,此时读取到结束标签</id>,函数4会被调用,然后,解析器会继续解析,因为仍然在<images>标签中,接下来他会试图读取结束标签,如果没有找到,他会继续调用函数3,接下来的步骤其实就是在函数2,3,4中不断的执行,直到解析到最外层节点解析完成,最后解析器发现没有内容可以解析了,解析过程就结束了,函数5就会被调用。 总之,解析过程的原则就是:解析器开始解析(函数1),如果解析到节点(函数2),就解析节点中的字符(函数3),如果没有字符,就继续解析(函数2),如果有字符,就继续解析,解析到节点结束标签(函数4),此节点就解析完成,然后继续解析,在函数2,4之间不断的来回执行,直至整个xml数据解析完成,调用函数5。 以上整个流程就是iOS中解析xml数据的基本流程。通常解析出来的数据我们需要一个实体类来保存解析出来的数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 创建安装项目时如何使用最终的{project} .exe.config
- ajax请求aspx页面
- xml – 用于搜索具有包含特定字符串的ANY属性的节点的Xpath
- 学习TDD(4)--实例2:基于ZooKeeper的服务器注册和探测类[实
- react如何性能达到最大化(前传),暨react为啥非得使用immut
- reactjs – React Starter Kit和Material UI:应在muiTheme
- Swift中ScrollView缩放图片的代理方法
- 为kindeditor添加在线播放视频功能(基于原有flash上传,mp4,
- 深入理解ajax系列第三篇——响应解码
- 如何使用.NET控制xml序列化的<?xml?>部分?