iOS开发之XML解析


有如上XML文件 

 /**

     *  XML解析

     分为两种方式:SAX解析和DOM解析。

     SAX解析:逐行进行解析数据

     优点:1.逐行解析,不会一次性读入文档,减少内存消耗。

     2.  因为是逐行解析,XML文件损坏对其没有影响。

     缺点:没办法获取文件的层级关系,对程序员而言获取数据比较麻烦。

     */

    1. 获取文件路径

//    NSString * filePath = [[NSBundle mainBundle]pathForResource:@"Teacher" ofType:@"xml"];

//   

    2.从文件中读取二进制流

//    NSData * data = [NSData dataWithContentsOfFile:filePath];

// 

    3.创建XMLParser对象

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

    4.设置代理

//    parser.delegate = self;

      5.开始解析

//    [parser parse];

    

    

#pragma mark- NSXMLParserDelegate

//遇到开标签得方法

-(void)parser:(NSXMLParser *)parserdidStartElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qNameattributes:(NSDictionary*)attributeDict

{


   NSLog(@"start-------%@",elementName);

}

//取值

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

{


   NSLog(@"string------%@",string);

}

//遇到关标签

-(void)parser:(NSXMLParser *)parserdidEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName

{


   NSLog(@"end---------%@",elementName);

**************************************

 /**

     *  DOM解析:一次性读入整个文档进行解析。

    优点:1.一次性将整个文档读入时,会将数据的解析结构记录下来,有利于程序员分析数据。

                2 .XML文件出错会立即发现

     缺点:由于一次性读入整个文档,对内存消耗比较大。同时优点也是缺点即XML文件出现错误就不能解析数据

     DOM原理是:遇到开标签进栈,遇到关标签出栈

     借助GDataXMLNode来解析

     */

//    1.获取文件路径

    NSString * filePath = [[NSBundlemainBundle]pathForResource:@"Teacher.xml"ofType:nil];

//    2.获取文件内容

    NSString * str = [NSStringstringWithContentsOfFile:filePathencoding:(NSUTF8StringEncoding)error:nil];

//    3.转换为XMLDocument。(当执行完这一步时,整个文档已经被解析完毕,并且转换为XMLDoucment进行存储。同时文档对应的树形也已经清晰)

    GDataXMLDocument *document = [[GDataXMLDocumentalloc]initWithXMLString:stroptions:0error:nil];

    第一种方式:不断地找子节点来获取数据

    1.获取根节点

//    GDataXMLElement * rootElement =  document.rootElement;

    NSLog(@"%@",rootElement);

    2.获取根节点的子节点

//    NSArray * array = [rootElement children];

    NSLog(@"%@",array);

    3.获取对应的所有子节点

//  NSArray * arrayElement = [array[1] children];

    NSLog(@"%@",arrayElement);

    4.获取sex节点

//    NSString * string = [arrayElement[1] stringValue];

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

    

//    第二种方式:使用elementForName:方法,给出一个节点对应的名字获取节点对应的数据

    

//          //1.获取根节点

//        GDataXMLElement * rootElement = [document rootElement];

      2.通过elementForName获取数据

//         NSArray * array =  [rootElement elementsForName:@"teacher"];

      3.从数组中找到对应的节点

//        GDataXMLElement * shengchenElement = array[1];

    4.通过elementForName:方法获取sex

//        NSArray * sexArray = [shengchenElement elementsForName:@"sex"];

//        NSString * string = [sexArray[0] stringValue ];

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

//    

    

    第三种方式;通过绝对路径获取对应的数据

//    NSArray * nodeArray = [ document nodesForXPath:@"teachers/teacher/sex" error:nil];

    NSLog(@"%@",nodeArray);

//    NSString * string = [nodeArray[1] stringValue];

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

    

//    第四种方式:通过相对路径查找数据(sex都会找到无论在哪个节点)

//    NSArray * nodesArr = [document nodesForXPath:@"//sex" error:nil];

//    NSArray * nodesArr = [document nodesForXPath:@"///teacher/sex" error:nil];

//    NSLog(@"%@",[nodesArr[1] stringValue]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值