XML数据解析的两种方法:SAX和DOM


一、XML的简单介绍


    1.XML(eXtensible Markup Language)'可扩展标记语言',JSON一样,也是用来数据交互。而HTML是超文本标记语言用来表示网页页面


    2.XML语法简介:

    一个完整的XML文件叫XML文档(XML Document),一般由以下几部分组成:


    a. 文档声明:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>


    b. 元素(Element)

        1> 一个元素包括开始标签和结束标签.

            <name>小红</name>

           一个元素可以没有元素内容,没有元素内容可以简写.

            </person>

           不过,XML中所有的空格和换行,都会当做具体的内容处理.

        2> 一个元素可以嵌套若干个子元素,但决不能出现交叉嵌套

            <person>

                <name>小花</name>

                <age>16</age>

            </person>

        3> 规范的XML文档最多只能有一个根元素,其他元素都是根元素的子元素


    c. 属性(Attribute)

        1> 一个元素可以拥有多个属性.

        <person name = "小明" age = "18"/>

        2> 属性值必须用双引号""或者单引号''括住.    

        3> 属性信息可以用元素内容来表示.



二、XML的两种解析方式:1.SAX 2.DOM


    XML解析所谓XML解析,指的就是将XML中元素的内容取出来或者将元素中的属性值提取出来。

    

    1. SAX解析:

    a. 概念

从根元素开始,一个元素一个元素的按顺序往下解析比较适合大文件的解析。SAX解析是同步方式。

    

    b. 解析方法:

        苹果原生: NSXMLParser ,使用比较简单设置代理就可以了。

        NSXMLParser 采用 SAX 方式逐行往下解析,当扫描到下面的情况都会通知代理。

            <1> 扫描到文档(Doucument)的开始与结束的时候,会通知代理;

            <2> 扫描到元素(Element)的开始与结束的时候,会通知代理;

            <3> 扫描到元素中的内容的时候,会通知代理。

    

    c. 使用步骤:

        // 1.传入XML,创建解析器

        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

        // 2.设置代理,监听解析过程

        parser.delegate = self;

        // 3.开始解析

        [parser parse];

        // 4.解析完毕之后刷新表格数据【由于SAX是同步的,所以能够在解析结束之后再进行刷新数据】

        [self.tableView reloadData];

}

        // 4.实现代理方法

        {

            // 1.当扫描到文档的开始时调用(开始解析)

- (void)parserDidStartDocument:(NSXMLParser *)parser;

            // 2.当扫描到元素的开始时调用(attributeDict存放着元素的属性)

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict;

            // 3.发现元素中的内容的时候开始调用

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;

            // 4.当扫描到元素结束时调用

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;

            // 5.当扫描到文档的结束时调用(解析完毕)

- (void)parserDidEndDocument:(NSXMLParser *)parser;

        }



    2.DOM解析:

    

        1. 概念

一次性将整个XML文档加载进内存内存消耗比较大比较适合小文件更加适用于Mac(PC端)。

    

2.   解析方法:使用第三方框架 GDateXML:

        * GDateXML: DOM方式解析,Google开发,基于libxml2。

        * libxml2: C语言,默认包含在iOS SDK,同时支持SAXDOM方式解析。

    

3. GDataXML使用步骤:

            a.导入第三方框架 GDateXML;

 b. 使用方法:

          // 1.加载整个XML文档
            GDataXMLDocument *dom = [[GDataXMLDocument alloc] initWithData:data options:0 error:NULL];
          // 2.获得文档的根元素
            GDataXMLElement *element = dom.rootElement;
          // 3.遍历根元素的子元素,得到根元素中包含的元素(vedio元素)
            [element.children enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                GDataXMLElement *vedio = obj;
                ITVedio *ITvedio = [[ITVedio alloc] init];
                  // 4.遍历子元素的元素内容或属性,得到vedio元素中包含的元素内容
                [vedio.children enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                    GDataXMLElement *ele = obj;
                  // 5.将元素内容取出赋值.
                    [ITvedio setValue:ele.stringValue forKeyPath:ele.name]; 
                }];
                  // 将数据模型放在数据源中.
                [self.vedios addObject:ITvedio]; 
            }];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值