XML解析

作者: 墨竹AI | 来源:发表于2018-02-27 12:07 被阅读0次

一 XML简介

XML曾经是最流行,出身名门,W3C主推,IBM,微软 是一门可拓展"标记语言"

  • XML 键值对
<标记></标记>
<标记>标记内容</标记>
<标记 属性1="属性"属性2="属性2">标记内容</标记>

特点:

  • 阅读方便,美观大方

二 解析方式

1 DOM MAC提供的解析方法,iOS中无法直接使用
- 原因:内存开销巨大!
- 可读可写
- 将数据已树形结构加载到内存
2 SAX iOS提供的解析方式
- 内存开销小
- 只读
- 速度快
- 从上到下,顺序解析的过程
- 读取到所需信息后可以随时停止

三 SAX解析的过程

1.打开文档(准备)
2.开始节点

    <videos>
        <video videoId="1">
            <name>
            <length>

3.发现节点内容(一个节点内容,可能会读取很多次!)

        01.C
        语言-
        语法预览
        320
        ....

4.结束节点

          </name>
        </length>
        ....
    </video>
   </videos>     (最后一个节点)  判断文档是否解析结束,如果没有就继续

5.文档解析完成!

在实际开发中,XML的解析是用过NSXMLParser的对象来实现!具体的实现过程,是通过"五个代理"方法不断循环,来完成XML解析!


四 解析框架

1.苹果原生

NSXMLParser:SAX方式解析
五个代理方法

2.第三方框架

libxml2 :纯C语言的框架,默认是包容iOS SDK ,同时支持DM,SAX方法解析,

GDataXMLLDom 解析,基于libxml2
  • XML解析的思维导图


    xml 解析思维导图.png

五 5个代理方法

#pragma mark --<XML解析代理方法>
//1.打开文档
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
    NSLog(@"1.开始文档");
    
    //1.清空数组
    [self.videos removeAllObjects];
}
//2.开始节点
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
    //elementName 节点名称
    //namespaceURI 命名空间
    //qualifiedName 命名空间限定的本地名称
    //attributes 属性
    
    NSLog(@"2.开始节点 %@ %@",elementName,attributeDict);
    
    
    if ([elementName isEqualToString:@"video"]) {
        
        //1.新建模型
        self.currentVideo = [[Video alloc]init];
        
        //2设置videoID的属性
        self.currentVideo.videoId = @([attributeDict[@"videoId"]intValue]);
    
        
    }
    
}

//3.发现节点内容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    //拼接字符串
    NSLog(@"==> %@",string);
    [self.elementStr appendString:string];
    
}

//4.结束节点
/*
    kvc
 */
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"4.结束节点:%@",elementName);
    
    if ([elementName isEqualToString:@"video"]) {
        
        [self.videos addObject:self.currentVideo];
        
    }else if (![elementName isEqualToString:@"videos"])
    {
        [self.currentVideo setValue:self.elementStr forKey:elementName];
        
    }
    //清空字符串
    [self.elementStr setString:@""];
    
}

//5.结束解析
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"5.结束解析!%@",self.videos);
}


//6.出现错误(主要是网络开发,就需要对出错进行处理)
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    
    NSLog(@"发生错误");
    
}

相关文章

  • iOS解析XML

    2.0 XML解析 2.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 2.2 XML解析...

  • iOS开发-XML解析

    一、 XML解析 1.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 1.2 XML解析 ...

  • 3-XML解析

    3.0 XML解析 3.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 3.2 XML解析...

  • XML、JSON解析

    XML解析 XML_GData解析 JSON解析

  • 05、网络解析

    解析:从事先规定好的格式中提取数据iOS开发常见的解析:XML解析,JSON解析 XML解析 XMl事例: XML...

  • Senior进阶 网络之数据解析之XML解析和JSON解析的用法

    Senior进阶 网络之数据解析之XML解析和JSON解析的用法 XML解析之SAX解析 XML解析之DOM解析 ...

  • XML

    NSXMLParser解析XML GDataXML解析XML

  • XML*

    目录 XML简介 XML基本语法 XML解析 * DOM解析   * DOM解析原理及工具   * DOM4J解析...

  • 面试相关

    1.Json解析与XML解析 Gson解析和FastJson ,FastJson解析效率高 XML解析,SAX解析...

  • 五、Groovy语法(五)json、xml解析

    Groovy数据解析 一、json解析 请求网络数据并解析 二、xml解析 groovy解析xml数据 groov...

网友评论

    本文标题:XML解析

    本文链接:https://www.haomeiwen.com/subject/wgrpxftx.html