小知识:

     关于翻译:从事先约定好的数据结构中获取数据

                  解析数据分三方:提供方, 解析方, 格式

                  ios中分别代表:服务器,  程序员, XMLJSON

                  实际开发中,程序员只需要从服务器获取数据,按照格式解析数据即可。

一、XML(可扩展标记语言)的解析方式:SAX 和DOM解析。其结构为:

          

二、SAX解析步骤:

      // 获取路径

    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];

    // 从文件中读取二进制流

    NSData *data = [NSData dataWithContentsOfFile:filePath];

    // 创建XMLParser对象

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

    // 设置delegate

    parser.delegate = self; 

    // 开始解析

    [parser parse];

代理的几个重要方法,在此可以提取自己想要的数据     

// 遇到开标签

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

 

}

// 取值

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

 

}

// 遇到关标签

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

  

}

 

 

三、 DOM解析(需要导入第三方类库,此类库由Google提供,后面会有附加,并且导入后要做一些修改,修改的内容 .h 文件的30~36行中有详细说明)

 // 获取文件路径

    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];

     // 获取文件内容

    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

    // 转化为XMLDocument(此时文档已经解析完毕,并且转化为XMLDoucment存储,同时文档的树形结构已清晰明了)

    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:str options:0 error:nil];

    

    // 方式一、 不断找子节点来获取数据

    // 1,获取根节点

    GDataXMLElement *rootElement = document.rootElement;

    // 2,获取子节点(通过children可以逐级向下找)

    NSArray *childElement = rootElement.children;

     方式二、 使用elementForName:方法,给出一个节点的名字找到节点

     1,获取根节点

    GDataXMLElement *rootElement = document.rootElement;

    2,通过elementForName:找

    NSArray *arr = [rootElement elementsForName:name];

    3, 从数组中找到需要的节点

    GDataXMLElement *element = arr[1];

    4,通过elementForName:找

    NSArray *arr1 = [element elementsForName:@"sex"];

     方式三、通过绝对路径查找对应的数据

    NSArray *nodes = [document nodesForXPath:path error:nil];

    // 方式四、通过相对路径查找

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

 

四、两种解析方式的优缺点

  SAX解析为逐行解析数据

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

              2 文件损坏,对解析没有影响

     缺点:逐行解析,没有办法获取文件的层级结构,获取比较繁琐

     

     DOM解析:一次性读入整个文档进行解析(原理:开标签入栈,关标签出栈)

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

              2 XML文件一旦出错立即发现

     缺点:由于一次性读入整个文件,内存消耗较大。同时文件出错时不能解析文件

    

 

posted on 2015-09-12 10:13  竹间Code  阅读(156)  评论(0编辑  收藏  举报