XML文件的解析

小知识:node

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

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

                  ios中分别表明:服务器,  程序员, XMLJSON数组

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

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

          

2、SAX解析步骤:spa

      // 获取路径翻译

    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{

  

}

 

 

3、 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、 不断找子节点来获取数据

    // 1,获取根节点

    GDataXMLElement *rootElement = document.rootElement;

    // 2,获取子节点(经过children能够逐级向下找)

    NSArray *childElement = rootElement.children;

     方式2、 使用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"];

     方式3、经过绝对路径查找对应的数据

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

    // 方式4、经过相对路径查找

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

 

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

  SAX解析为逐行解析数据

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

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

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

     

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

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

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

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

相关文章
相关标签/搜索