zoukankan      html  css  js  c++  java
  • XML解析的几种方法

    第一种方法系统自带的解析方法(NSXMLParser)

        //1、指定XML文件

        NSString *path=[[NSBundle mainBundle] pathForResource:@"person" ofType:@"xml"];

        //转换成data类型对象

        NSData *data=[NSData dataWithContentsOfFile:path];

        

        //2、为parser指定初始值

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

        

        //指定代理

        parser.delegate=self;

        

        //3、实现文件解析

        BOOL bol=[parser parse];

        

        //返回解析的结果

        NSLog(@"%d",bol);

        

    }

    //开始解析xml文档

    - (void)parserDidStartDocument:(NSXMLParser *)parser

    {

        //初始化集合

        self.arryM=[NSMutableArray array];

        NSLog(@"开始解析文档StartDocument");

    }

    //xml文档解析结束,输出集合的内容

    - (void)parserDidEndDocument:(NSXMLParser *)parser

    {

        NSLog(@"结束解析文档DidEndDocument");

        NSLog(@"%@",self.arryM);

    }

    //文档元素解析开始,attributeDict表示属性的字典

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

    {

        //找到文档中user的元素,初始化字典 dictM

        if ([elementName isEqualToString:@"User"])

        {

            //文档开始 初始化字典

            self.dictM=[NSMutableDictionary dictionary];

            //向字典中添加属性元素

            [self.dictM setDictionary:attributeDict];

        }

        NSLog(@"<%@>",elementName);

    }

    //结束解析文档元素

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

    {

        //判断元素的关键字,只有符合name或者age的时候才向字典中添加元素

        if ([elementName isEqualToString:@"name"]||[elementName isEqualToString:@"age"])

        {

            //这时候dictM中已经有三对键值对啦

            [self.dictM setObject:self.strM forKey:elementName];

        }

        //直到找到User元素标签时,才向arrM中添加字典

        else if ([elementName isEqualToString:@"User"])

        {

            [self.arryM addObject:self.dictM];

        }

        NSLog(@"</%@>",elementName);

    }

    //解析文件元素的内容

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

    {

        //将局部的字符串赋值给全局变量的字符串

        self.strM=string;

        NSLog(@"%@",string);

    }

     

    第二种方法XMLDictionary解析

    第三种GDataXML第三方类库的解析方法(也是解析美团接口的城市列表中的城市,纬度,经度)

    使用NSdata对象初始化

        GDataXMLDocument *doc=[[GDataXMLDocument alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.meituan.com/api/v1/divisions?mtt=1.help%2Fapi.0.0.im785tzf"]] options:0 error:nil];

        

        

        //获取根节点

        GDataXMLElement *rootelement=[doc rootElement];

        

        //获取根节点下的节点

        NSArray *User=[rootelement elementsForName:@"divisions"];

        

        for (GDataXMLElement *user in User)

        {

            //获取User节点的id属性

            NSString *userID=[[user attributeForName:@"id"] stringValue];

            //NSLog(@"%@",userID);

            

            //获取name节点的值

            //GDataXMLElement *namelement=[[user elementsForName:@"name"]objectAtIndex:0];

            NSString *name=[[[user elementsForName:@"name"]objectAtIndex:0] stringValue];

            NSLog(@"%@",name);

            

            //获取age节点的值

            //GDataXMLElement *agelement=[[user elementsForName:@"age"]objectAtIndex:0];

            NSString *age=[[[user elementsForName:@"location"]objectAtIndex:0] stringValue];

            //NSLog(@"%@",age);

            

            //将的到的name,age,id先放到一个字典,然后在拼接成一个集合

            NSMutableDictionary *dic=[NSMutableDictionary dictionary];

            [dic setObject:userID forKey:@"id"];

            [dic setObject:name forKey:@"name"];

            [dic setObject:age forKey:@"location"];

            [self.arrM addObject:dic];

        }

        NSLog(@"%@",self.arrM);

    }

  • 相关阅读:
    this与$(this)的区别
    用CSS3实现文字渐变效果
    css3,filter实现背景背景渐变的效果
    jQuery DOM 元素方法 index() 方法
    toggleClass() 隐藏层
    AJAX与WebService
    对于JSP台头的理解,和预设的重要性
    [转]windows下修改eclipse的默认编码+[转]eclipse 默认文件编码修改
    使用Meta自动定时刷新页面及一些HTML标记
    后台代码里执行弹出脚本方法!(Response.Write)(转)
  • 原文地址:https://www.cnblogs.com/layios/p/5331009.html
Copyright © 2011-2022 走看看