加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xml数据解析的基本数据流程

发布时间:2020-12-16 09:05:43 所属栏目:百科 来源:网络整理
导读:iOS开发过程中,我们经常会使用web service从服务器上获取数据,而数据格式多以json和xml为主,今天我们就xml的解析流程做以简单的分析。 首先,我们需要初始化一个NSXMLParser的实例parser用以解析xml数据,并且设置parser的delegate,然后就可以开始解析xm

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数据的基本流程。通常解析出来的数据我们需要一个实体类来保存解析出来的数据。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读