zoukankan      html  css  js  c++  java
  • 网络篇-解析XML

    简述

        1、XML它是可扩展标记语言,跟JSON一样,也是常用的一种用于交互的数据格式,至于如何展示、有某些规则,我这里就不写入了,这里的话主要讲解如何解析XML
        2、XML的方式有2种
            1、DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
            2、SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
        3、解析XML的方式(有很多,这里介绍两种,一个解析SAX,一种解析DOM)
            1、NSXMLParser:SAX方式解析,使用简单(苹果原生)
            2、GDataXML:DOM方式解析,(Google开发)
    

    服务端返回的XML文件,用于后面的两个Demo

    <?xml version="1.0" encoding="UTF-8"?>
    <Book>
        <title>XML</title>
        <author>LitterL</author>
    </Book>
    
    
    • NSXMLParser

    • 代码

          -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
              //1、创建URL
              NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/Book?type=XML"];
              //2、创建请求
              NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
              //3、发送异步请求
              [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
                  //4、创建解析器,并且传入需要解析的XML数据
                  NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data];
                  //5、设置代理,监听解析过程
                  xml.delegate = self;
                  //6、开始解析
                  [xml parse];
              }];
          }
          #pragma mark  NSXMLParserDelegate
          //1、开始解析
          - (void)parserDidStartDocument:(NSXMLParser *)parser{
              NSLog(@"开始解析------%s",__func__);
          }
          //2、开始解析XML文档中的每一元素
          - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{
              NSLog(@"开始解析%@-----%s",elementName,__func__);
              NSLog(@"%@",attributeDict);
          }
          //3、解析完XML文档中的每一元素
          - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{
              NSLog(@"完成解析解析%@-----%s",elementName,__func__);
          }
          //4、解析完毕
          - (void)parserDidEndDocument:(NSXMLParser *)parser{
              NSLog(@"完成解析------%s",__func__);
          }
      
    • 解析后的结果
      --------------------------------------------------------图一--------------------------------------------------------------------------

    • GDataXML

    • 简述:

      • 下载地址:GDataXML
      • 下载完GDataXML之后,把GDataXML-master->Sources->GDataXML直接拖入项目中,然后编译,你会发现#import <libxml/tree.h>这个地方是会报错的,它的上面会有地下这么一句话。
      // libxml includes require that the target Header Search Paths contain
      

    //
    // /usr/include/libxml2
    //
    // and Other Linker Flags contain
    //
    // -lxml2
    ```

    • 按照步骤完成这两项:
      --------------------------------------------------------图二--------------------------------------------------------------------------

    --------------------------------------------------------图三--------------------------------------------------------------------------

       <img src="http://images2015.cnblogs.com/blog/731729/201601/731729-20160118232010500-1966496143.png" style="400px;height:200px">
    
    • 当你完成上面两个的时候,编译一次,你会发现从一个变成了二十多个错误,那么你的在操作了
      --------------------------------------------------------图四--------------------------------------------------------------------------

    `完成上面的一些配置之后,我们就可以正式开始搬代码了`
    
    • 代码

      -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
          //1、创建URL
          NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/Book?type=XML"];
          //2、创建请求
          NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
          //3、发送异步请求
          [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
              //4、加载所有XML数据到内容中去
              GDataXMLDocument *doc= [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil];
              //5、获取根元素
              GDataXMLElement *rootelement = doc.rootElement;
              //6、获取所有的子元素
              NSArray *array = rootelement.attributes;
              //7、获取一个子元素 并且输出
              GDataXMLElement *elme =(GDataXMLElement *)array[0];
              NSLog(@"%@",[[elme attributeForName:@"title"] stringValue]);
              NSLog(@"%@",[[elme attributeForName:@"author"] stringValue]);
          }];
      }
      
    • 解析后的结果
      --------------------------------------------------------图五--------------------------------------------------------------------------

      <img src="http://images2015.cnblogs.com/blog/731729/201601/731729-20160118232050015-194470318.png" style="400px;">
      
                     本章到此结束
               欢迎各位码友随意转载并指正
  • 相关阅读:
    nexus 手动更改 私服包
    maven 构建时 错误: 程序包netscape.javascript不存在
    RocketMQ
    NSQ
    beego 实现API自动化文档
    动态追踪技术漫谈
    go vendor管理Golang项目依赖
    consul介绍
    golang rpc介绍
    golang 使用os/exec配合context实现的超时机制
  • 原文地址:https://www.cnblogs.com/ljy-666/p/5140800.html
Copyright © 2011-2022 走看看